C++ 接口,不重复代码的最佳方法是什么

C++ Interface, What's the best way to not duplicate code

我有这个问题:

我有一个调用事件函数 do() 的事件管理器

Event *p; 
//p takes it values from an Event Queue
p->do()

有些事件有两个属性 Object a 和 b

class EventX : public Event {

   public : 
       EventX();
       void do(){actionX(a, b)}
   private : 
       Object a;
       Object b;
       bool bothSide;

};

class EventY : public Event {

   public : 
       EventY();
       void do(){actionY(a,b);}
   private : 
       Object a;
       Object b;
       bool bothSide;

};

do() 是一个执行从a 到b 的动作的函数。 我想创建一个接口,如果 bothSide 属性为真,则可以从 a 到 b 调用 do() 并从 b 到 a 调用 do() 。 那可能吗 ?我有许多具有不同 do() 函数的事件,这些函数执行从 a 到 b 的不同操作。

感谢阅读

你可以有额外的层与另一个接口

struct EventAB : Event
{
    void do() final { if (bothSide) action(b, a); action(a, b); }
    virtual void action(Object&, Object&) = 0;

/*...*/

private:
    Object a;
    Object b;
    bool bothSide = false;
};

然后

class EventX : public EventAB {
public:
    void action(Object& lhs, Object& rhs) override { actionX(lhs, rhs); }
    // ...
};

class EventY : public EventAB {
public:
    void action(Object& lhs, Object& rhs) override { actionY(lhs, rhs); }
    // ...
};