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
(由于这是一个指针,我们使用->*
而不是*
)
HTHtest\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);
}