#include <iostream>
using namespace std;
class BaseFoo
{
public:
virtual void bar()=0;
};
class Foo1: public BaseFoo
{
public:
virtual void bar() override
{
cout << "Foo1::bar()\n";
}
};
class Foo2: public BaseFoo
{
public:
virtual void bar() override
{
cout << "Foo2::bar()\n";
}
};
void func(BaseFoo* ptr, void (BaseFoo::*func)())
{
(ptr->*func)();
}
int main()
{
Foo1 foo1;
Foo2 foo2;
func(&foo1, &BaseFoo::bar);
func(&foo2, &BaseFoo::bar);
return 0;
}