我试图从派生类传递一个函数,它需要一个函数指针的基类函数,但我得到一个编译器错误。无法将派生类函数的指针传递到基类
[BCC32 Error] E2034 Cannot convert 'void (Bar::*)(int)' to 'void (Foo::*)(int)'
我想这是按照设计,但有没有办法解决这个不涉及不愉快的铸造? boost::bind
能帮助我吗?
#define CALL_MEMBER_FN(object,ptrToMember) ((object).*(ptrToMember))
class Foo
{
public:
typedef void (Foo::*FFunc)(int i);
void test(FFunc f)
{
CALL_MEMBER_FN(*this,f)(123);
}
void barf1(int i) {};
};
class Bar : public Foo
{
public:
void barf2(int i) {};
};
void ffff()
{
Foo f;
f.test(Foo::barf1); // works
Bar b;
b.test(Bar::barf1); // works
b.test(Bar::barf2); // ERROR
}
作为一个方面说明,我这工作正常使用虚拟函数,这是显而易见的方法,而不是一个函数指针,但我只是想获得它在尝试一些刺激前的工作是这样的: :绑定挂羊头卖狗肉后...
如果你有一个C++编译器11,也许你可以使用[' std :: function'](http://en.cppreference.com/w/cpp/utility/functional/function)和['std :: bind'](http://en.cppreference.com/w/ CPP /实用程序/功能/绑定)? – 2012-01-10 13:12:46