在构造函数中传递__closure函数

时间:2014-10-04 04:15:55

标签: constructor function-pointers c++builder c++builder-xe5

请参阅这个小小的我头脑的男女同校代码:

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;

现在问题。

如果调用bar.SetByAssignment()它工作正常,则设置函数指针并从Foo中正确调用。但在这种情况下,它被公开为公共变量。我希望它是私密的。

我想通过在构造函数bar.SetByConstructor()中传递函数指针来简化类,并将其隐藏为私有,但在这里我得到编译器错误:

[bcc32 Error] : Member function must be called or its address taken

我认为__closure会使这成为可能。是否可能,或者我只是做错了?

1 个答案:

答案 0 :(得分:2)

执行编译器告诉您的操作。传递方法的内存地址。你如何获得任何的内存地址?使用&地址运算符:

foo = new Foo(&CallbackFunction); 

在使用作业时这样做是很好的习惯(尽管在这种情况下它是可选的):

foo->Callback = &CallbackFunction;