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); }
// ...
};
我有这个问题:
我有一个调用事件函数 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); }
// ...
};