在成员函数上调用函数指针

时间:2015-10-08 10:31:49

标签: c++ function-pointers

我是C ++的新手(经过许多Java年)。 我正在尝试使用函数指针指向我的类的成员函数,如下所示:

class MyClass
{
public:
    MyClass();
    void foo();
    void bar();
};

MyClass::MyClass(){}

void MyClass::bar(){}


void MyClass::foo()
{
    void (MyClass::*myMethod)();
    myMethod = &MyClass::bar;

//-----THIS IS THE LINE WITH PROBLEM-----------
    myMethod();

}

但是,编译器失败了:

test.cpp: In member function ‘void MyClass::foo()’:
test.cpp:22:14: error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘myMethod (...)’, e.g. ‘(... ->* myMethod) (...)’
     myMethod();
          ^

我一直在尝试*,&的各种组合字符,并搜索解决方案,但无法让它工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:5)

myMethod是一个成员函数,因此您需要在它所属的类的实例上调用它。由于您已经在成员函数中,因此可以使用this

(this->*myMethod)()

答案 1 :(得分:0)

使用指向成员的指针的语法需要作用于对象。

而不是myMethod(),执行类似

的操作
 MyClass *objectptr = pointer_to_some_valid_object();
 (objectptr->(*myMethod))();

 MyClass &objref = reference_of_some_valid_object();
 (objref.(*myMethod))();

在这两种情况下,指向(第一种情况)或引用(第二种情况)的对象必须仍然存在以调用该方法。