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

C++ 如何使用指向成员函数的指针调用函数,c++,function,function-pointers,member-function-pointers,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(): 无论我尝试什么组合,代码的最后一行都不起作用(编译错误)。使用指向成员函数的指针调用

我有一门课:

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():


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

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

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

使用:

(this->*test_case[0].test_func)(1);
使用以下命令:

void A::run() 
{   
    test_case[0].test_func = &A::test_func_0;
    (this->*(test_case[0].test_func))(1);
}
请注意,您有两个错误。第一个问题是如何形成成员函数指针。请注意,执行此操作的唯一方法是使用
&ClassName::FuncName
,无论您是否在类范围内这也是强制性的

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


HTH

test\u func是一个A::成员,而不是test\u case\t成员。@Erik:是的。我注意到了。实际上我是在ideone测试的。因此,更正和张贴的链接,以表意也!
void A::run() 
{   
    test_case[0].test_func = &A::test_func_0;
    (this->*(test_case[0].test_func))(1);
}