【发布时间】:2022-01-19 09:45:42
【问题描述】:
我有这个问题:
我有一个调用事件函数 do() 的事件管理器
Event *p;
//p takes it values from an Event Queue
p->do()
一些事件有两个属性对象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调用do()到b和从b到a的do()的接口。 那可能吗 ?我有许多具有不同 do() 函数的事件,它们执行从 a 到 b 的不同操作。
感谢您的阅读
【问题讨论】:
-
如果
do是Event中的一个虚方法,那么派生类可以实现它来做任何他们喜欢的事情。问题不清楚。你能展示你想写但不知道怎么写的代码吗?或者显示您希望避免重复的代码。 -
我显然想做 make do(){ if(bothSide) actionX(b, a) actionX(a, b) }
-
您可以根据一些配置参数(这里它是一个布尔值)编写一个模板类,然后简单地使用
constexpr布尔值来确定要执行的操作。或者,参数是类调用的某个函数/lambda。 -
由于你没有指定“更好”的标准,所以无法说什么是最好的——最多这样的描述是基于意见的,不同的人有不同的意见。一个选项是放置成员
a、b和bothSide,并在EventX和EventY的公共基类中声明一个虚函数do().该公共基础可能是Event或派生自Event的另一个中间类。
标签: c++ pointers inheritance interface architecture