如何使用指向成员函数的函数调用函数

时间:2011-03-07 11:06:33

标签: c++ function function-pointers member-function-pointers

我有一个班级:

class A {
    void test_func_0(int);
    void run();

    typedef void(A::*test_func_t)(int);

    struct test_case_t{
       test_func_t test_func;
    } test_case[100];
};

现在我想在run()中调用test_func():

void A::run() 
{
    test_case[0].test_func = &test_func_0;
    test_case[0].*(test_func)(1);
}

我的代码的最后一行不起作用(编译错误),无论我尝试什么组合。

3 个答案:

答案 0 :(得分:5)

使用此:

void A::run() 
{   
    test_case[0].test_func = &A::test_func_0;
    (this->*(test_case[0].test_func))(1);
}

请注意,您有2个错误。第一个是你如何形成成员函数指针。请注意,唯一的方法是使用&ClassName::FuncName,无论您是否在班级范围内。 &安培;也是强制性的。

第二个是,当您通过成员函数指针调用成员时,必须显式指定要调用成员函数的对象(在您的情况下为A类型)。在这种情况下,您必须指定this(因为这是我们使用->*而不是.*的指针)

HTH

答案 1 :(得分:1)

使用:

(this->*test_case[0].test_func)(1);

答案 2 :(得分:-1)

使用指向成员函数的成员函数调用:

 test_case[0].test_func = &A::test_func_0; //note this also!
(this->*test_case[0].test_func)(1);

演示:http://www.ideone.com/9o8C4