之前曾有人问过这个问题,但没有令人满意的回答。
我有一个充当事件处理程序的类,我想有一个不错的语法来在事件外部调用事件处理程序。归结为重写()运算符。我目前有
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=
或任何其他运算符的工作方式相同