Все зависит от того, что вам нужно сделать в вашем operator()
.
Если вам не нужен доступ к состоянию Command
, вы можете передать вызываемую функцию в конструктор.Например, здесь:
class CallCommand : public Command {
std::function<void()> f;
public:
CallCommand(Dependency1& d1, Dependency2& d2, std::function<void()> f) : Command(d1,d2), f(f) {
}
private:
void operator()() override { f(); }
};
Вы можете вызвать его, предоставив свободную функцию, лямбду или любой объект std::function
.Например:
CallCommand c(d1,d2, [](){ cout<<"Hello world"<<endl;});
Но если вам нужен доступ к контексту класса, то я боюсь, что реальное переопределение, как и вы, никак не обойтись (а макрос - ужасная работа для стандартного кода),