之前已经问过这个问题,但没有得到满意的答复.
我有一个充当事件处理程序的类,我希望有一个很好的语法来调用事件之外的事件处理程序.这归结为覆盖()运算符.我现在有
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=运算符或任何其他运算符的工作方式相同
| 归档时间: |
|
| 查看次数: |
157 次 |
| 最近记录: |