我正在尝试将派生类中的函数传递给需要函数指针的基类函数,但出现编译器错误。
[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
}
作为旁注,我使用虚函数可以正常工作,这是一种明显的方法,而不是函数指针,但我只是想让它以这种方式工作,然后再尝试一些 boost::bind 技巧......