天天看點

__closure調用另一個類中的函數

在一個類中,調用另一個類的成員函數,代碼如下:

//定義事件函數指針
typedef void __fastcall(__closure * TMyEvent)(AnsiString s);
TMyEvent FOnTextOut;
//---------------------------------------------------------------------------
class a
{
    public :
        void __fastcall test(AnsiString s)
        {
            ShowMessage(s);
        }
};
class b
{
    public :
        void __fastcall show(a &p,AnsiString s)
        {
            FOnTextOut = p.test;
            FOnTextOut(s);
        }
};
           

.cpp中調用如下:

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   a a1;
   b b1;
   b1.show(a1,"hello world"); //調用類a1中的成員方法test
}
           

如果不加__closure編譯通不過,顯示錯誤:

[C++ Error] Unit1.h(28): E2235 Member function must be called or its address taken