()运算符重载

Rus*_*han 2 c++ c++11

之前已经问过这个问题,但没有得到满意的答复.

我有一个充当事件处理程序的类,我希望有一个很好的语法来调用事件之外的事件处理程序.这归结为覆盖()运算符.我现在有

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

    void operator() (void* sender, EventArg e){ Call(sender, e); }
};
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.我可以通过调用事件处理程序

EventHandler EH;
EH(nullptr, EventArgs::Empty());
Run Code Online (Sandbox Code Playgroud)

我的问题在于我通常将事件处理程序存储在堆上,因此我需要

EventHandler* EH;
EH(nullptr, EventArgs::Empty());  // error but this is the syntax I'm hoping for
Run Code Online (Sandbox Code Playgroud)

但这只能用

EventHandler* EH;
(*EH)(nullptr, EventArgs::Empty());  // no error
Run Code Online (Sandbox Code Playgroud)

如何覆盖()运算符以使其与指向EventHandler对象的指针一起使用?我已经看到一些看起来像重载 - >()运算符而不仅仅是()运算符的东西,但我无法弄清楚它.

小智 7

运营商->()不存在.

有两种方法可以调用运算符.

EventHandler* EH;
(*EH)(nullptr, EventArgs::Empty());
Run Code Online (Sandbox Code Playgroud)

要么

EventHandler* EH;
EH->operator()(nullptr, EventArgs::Empty());
Run Code Online (Sandbox Code Playgroud)

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