__closure超难问题
//下面的代码用来模拟c#中的事件处理机制
class TEventArgs:TObject
{
};
typedef void __fastcall (__closure *MethodType)(TObject* sender,TEventArgs* args);
class __event
{
private:
list<MethodType> l;
public:
void operator +=(MethodType method)
{
l.push_back(method);
}
void AddHandler(MethodType method)
{
l.push_back(method);
}
};
奇怪的问题是,我在TForm1中定义了一个函数hello,函数声明和MethodType完全一样,然后使用下面的语句:
__event e;
e.AddHandler(this->hello3);
e+=this->hello3;
编译的时候报告e+=this->hello3;有问题,而之前的语句确没有问题,报错:member function must be called or its address taken。这两个函数调用本质是没有区别的,就是函数名称不一样,为什么会出现这种情况呢?
还有,如果把MethodType作为类构造函数的参数进行传送的话,在定义对象的时候也是报告这个错误,不知为何?