保存在结构中的调用对象方法(MSVC2010)

时间:2015-10-08 16:03:28

标签: c++ visual-studio-2010

有一个结构:

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下编译吗?

3 个答案:

答案 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);