有一个结构:
scheduled_call {
MyClass* object;
int value;
void (MyClass::*setter)(const int)
}
上课:
MyClass {
void doSomething(const int);
}
结构编译得很好,但是当我尝试将值作为函数调用时,它会抛出错误:
我需要执行此结构中保存的调用。我试过这个:
void executeIt(scheduled_call cl) {
cl.object->*(cl.method)(cl.value);
}
但我明白了:
error C2064: term does not evaluate to a function taking 1 arguments
我的编码基于C/C++ function pointer guide。我这样做是为了实验,如果失败我当然可以回到switch
陈述。
任何人都可以在Visual Studio 2010下编译吗?
答案 0 :(得分:1)
您需要在struct
:
scheduled_call {
MyClass* object;
int value;
void (MyClass::*method)(int); // <<<<
}
答案 1 :(得分:1)
void MyClass::*method;
不是指向类memeber函数的有效函数指针。为此,我们需要
void (MyClass::*method)(int)
现在method
是指向MyClass::doSomething()
答案 2 :(得分:0)
问题出在方法调用上。这是错误:
cl.object->*(cl.method)(cl.value);
正确:
(cl.object->*cl.method)(cl.value);