【发布时间】:2012-01-25 20:47:08
【问题描述】:
我有两节课
class B {
public:
int func(int i);
};
class A {
public:
typedef int (B::*fPtr)(int);
void run();
B* mB;
};
void A::run() {
// create a pointer
fPtr p = &(B::func);
// invoke the function
mB->*p(2); <------- Compilation Error
}
我需要的是在 A 的 run 函数中创建一个指向 func() 的指针。我收到一个编译错误,指出 mB 与具有 1 个参数的函数不对应。
请帮忙
【问题讨论】:
-
你为什么要搞得这么复杂?为什么你用继承标记它 - 当你不使用它时?你听说过接口吗?
-
为什么不使用 std::function/boost::function?它们往往比愚蠢的 C 风格函数指针更灵活、更易于使用。
-
@EthanSteinberg 成员函数指针与 C 函数指针几乎没有关系,不能存储在
std/boost::function -
@BenjaminLindley 将成员函数存储在 std::function 中很简单。这种情况下的示例是
std::function<int(B*,int)> fun = &B::func。这样通话就不会那么复杂了fun(mB,2);