この頭のてっぺんの小さな男女共学のスニペットを参照してください。
typedef void __fastcall (__closure *GetHTTPCallBack)(String filename);
class Foo {
private:
public:
GetHTTPCallBack Callback;
__fastcall Foo (void) { Callback = NULL; }
__fastcall Foo (GetHTTPCallBack callback) { Callback = callback; }
};
class Bar {
private:
Foo *foo;
public:
void __fastcall CallbackFunction(String fileName) { // Do something }
void __fastcall SetByConstructor(void) { foo = new Foo(CallbackFunction); }
void __fastcall SetByAssignment (void) { foo = new Foo(); foo->Callback = CallbackFunction; }
};
Bar bar;
今問題に。
Call bar.SetByAssignment()
it が正常に動作する場合、関数ポインタが設定され、Foo から正しく呼び出されます。ただし、この場合はパブリック変数として公開されます。プライベートでお願いします。
コンストラクターで関数ポインターを渡すことにより、クラスを単純化し、プライベートに非表示にしたいのですbar.SetByConstructor()
が、ここでコンパイラ エラーが発生します。
[bcc32 Error] : Member function must be called or its address taken
__closure
これが可能になると思いました。それはまったく可能ですか、それとも私が間違っているだけですか?