【发布时间】:2023-04-07 03:10:01
【问题描述】:
我正在尝试将派生类中的函数传递给需要函数指针的基类函数,但出现编译器错误。
[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 技巧...
【问题讨论】:
-
如果你有 C++11 编译器,也许你可以使用
std::function和std::bind?
标签: c++ boost member-function-pointers