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つのエラーがあったことに注意してください。1つ目は、member-function-pointerをどのように作成したかです。&ClassName::FuncNameそれを行う唯一の方法は、クラススコープにいるかどうかに関係なく使用することであることに注意してください。&も必須です。

2つ目は、メンバー関数ポインターを介してメンバーを呼び出す場合、メンバー関数を呼び出すオブジェクト(この場合はタイプA)を明示的に指定する必要があるということです。この場合、指定する必要があります(これは、ではなくthis使用するポインタであるため)->*.*

HTH

于 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 に答える