現在、Unreal EngineのC++プロジェクトで作業しています。void(myClass :: *)()をvoid(*)()に変換する方法
class A
{
public:
void (* array[10])();
//Add Function to an array
void AddFunctionToArray(void(*function)());
};
class B
{
public:
A a;
//Sending a B function to A
void SendMyFunction();
void Foo();
};
void B::SendMyFunction()
{
a.AddFunctionToArray(&B::Foo);
}
私はエラーを取得する:can't convert void (B::*)() to void (*)()
どのように私は別の私のクラスのいずれかから関数ポインタを送ることができますか?
おそらくCスタイルの配列の代わりに 'std :: vector'を使いたいでしょう。 – tadman
'B :: Foo'は' B'を実行する必要があります。 Unreal Engineには 'B'がありませんので、呼び出すことはできません。 'B :: Foo'を' static'にするか、 'B'の外側で自由な関数にして、' B'を必要としないようにしてください。 – nwp
Unreal APIがコールバックに返される "closure"値を提供する場合(例えばC APIの場合は 'void * data'のようなものです)、' B * 'とaを含む小さな構造体へのポインタを渡すことができます'(B :: *)()'を呼び出すと、コールバックをラッパー関数にして 'void * data'クロージャーポインタを構造体にキャストしてから適切な関数を呼び出します。 (あるいは単純にラムダオブジェクトにバインドし、それを 'std :: function'オブジェクトに貼り付け、コールバックで' void * data'を 'std :: function'型にキャストして呼び出します)。 –