之前曾有人问过这个问题,但没有令人满意的回答。

我有一个充当事件处理程序的类,我想有一个不错的语法来在事件外部调用事件处理程序。归结为重写()运算符。我目前有

class EventHandler
{
public:
    void Call(void* sender, EventArgs e);

    void operator() (void* sender, EventArg e){ Call(sender, e); }
};

效果很好。我可以通过以下方式调用事件处理程序
EventHandler EH;
EH(nullptr, EventArgs::Empty());

我的问题在于,我通常将事件处理程序存储在堆上,因此我需要
EventHandler* EH;
EH(nullptr, EventArgs::Empty());  // error but this is the syntax I'm hoping for

但这只能用
EventHandler* EH;
(*EH)(nullptr, EventArgs::Empty());  // no error

如何覆盖()运算符以使其与EventHandler对象的指针一起工作?我已经看到了一些看起来像重载->()运算符而不是仅重载()运算符的事情,但是我无法理解它。

最佳答案

运算符->()不存在。

有两种方法可以 call 接线员。

EventHandler* EH;
(*EH)(nullptr, EventArgs::Empty());

要么
EventHandler* EH;
EH->operator()(nullptr, EventArgs::Empty());

这与operator=或任何其他运算符的工作方式相同

09-04 16:39