2

我有一堂课:

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);
}

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

4

3 回答 3

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(因为这是我们使用的指针,->*而不是.*

高温高压

于 2011-03-07T11:18:47.277 回答
1

利用:

(this->*test_case[0].test_func)(1);
于 2011-03-07T11:14:22.853 回答
-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

于 2011-03-07T11:10:33.403 回答