Этот вопрос задан раньше, но не отвечает удовлетворительно.() Перегрузка оператора
У меня есть класс, который действует как обработчик события, и я хотел бы иметь хороший синтаксис для вызова обработчика события за пределами события. Это сводится к переопределению оператора(). Я в настоящее время имею
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? Я видел некоторые вещи, которые выглядят как перегрузка оператора ->(), а не только оператор(), но я не смог его понять.
Возможно, причина в том, что удовлетворительного ответа не существует, потому что это невозможно? Компилятор распознает указатель на функцию и позволяет отказаться от разыменования, но нет соответствующего ярлыка для указателей на объекты класса. –
Вы можете превратить ненулевой указатель в ссылку, чтобы получить синтаксис, который вы ищете. – quamrana