2

重複の可能性:
メソッドを同じクラスのメソッドに渡す最良の方法

関数ポインターをパラメーターとして渡す際に問題が発生したことはありません。これは機能します:

void functionThatTakesFPTR(void(*function)(int), int someValue){ 
    function(someValue);
   }

void printValue(int value){
    std::printf("%d",value);
}

int main(int argc, char** argv){
    functionThatTakesFPTR(&printValue, 8);

    return EXIT_SUCCESS;
}

ただし、オブジェクト関数を渡すことはできません

void MyClass::setter(float value){ }

void MyClass::testFunction(void(*setterPtr)(float)){ }

void MyClass::someFunc(){
     testFunction(&(this->setter));
}

私には、これは関数ではなく this のアドレスを渡すように見え、少し混乱しています。そうすることは可能ですか?また、別のクラス (インスタンス MyClass2) のオブジェクトの関数ポインタを渡すことは可能ですか?

編集:私が得ているエラーは、「クラス 'MyClass'にはメンバー 'setter'がありません」です。

4

1 に答える 1

8

問題は、メソッドの呼び出しにはクラス インスタンスへの参照も必要であることです。スタンドアロン関数のようにクラス メソッドを単純に呼び出すことはできません。

Pointer-to-Member Functionsについて読む必要があります。

于 2012-11-30T20:00:11.510 に答える