0

クラスメンバー関数を非クラスメンバー関数のパラメーターに渡すにはどうすればよいですか? 次のコンパイル エラーが発生します。

error: argument of type ‘void (MyNamespace::MyClass::)(int*)’ does not match ‘void (*)(int*)’

Library.h

typedef void (*testCallback)(int* iParam);
void UsingTheFoo(testCallback Callback);

ライブラリ.cpp

void UsingTheFoo(testCallback Callback)
{
  int *p_int = new int;
  *p_int = 5;
  Callback(p_int);
}

MyClass.cpp

namespace MyNamespace
{

    void MyClass::fooCB(int* a)
    {
        printf("hey! %d\n", *a);
    }


    void MyClass::testo()
    {
        UsingTheFoo(fooCB);
    }

} // MyNamespace

「Library」のコードを変更することはできません。MyClass メンバー関数で「UsingTheFoo」を使用する必要があります。私は自分のやり方が間違っていることを認識しています。同様の質問を検索して見つけましたが、理解できませんでした(シフトの終わりに脳死しました:))私の問題に完全に適応するためにそれらのいずれかを完全に理解できませんでした。

私はすでに読んだ:http://www.parashift.com/c++-faq-lite/pointers-to-members.html :S

4

3 に答える 3