我遇到了问题,我不确定如何在C ++中处理它;
我有三个对象,每个对象可以执行许多不同的操作。这些对象支持一个附加对象,该对象可以添加到它们可以执行的操作中。根据添加的对象,添加将启用不同的操作。
我将如何在C ++中对此进行建模?
我想要A,B,C,AddOn1,AddOn2等课程。
问题是:
AddOn1 / 2如何在运行时知道它包含哪些操作(换句话说,它如何知道它附加到的对象的类型)?
A,B,C类如何知道它有哪种类型的附加组件?
我想做点什么
A级{ ... AddOn * addOn; };
并使用该指针处理加载项。但是我需要将它转换为特定的类才能使用它的功能。
我可以看到如何使用像hasAddOn1和hasAddOn2这样的布尔字段并根据这些设置进行强制转换。然后在AddOn基类中,我可以有一个指向其父级的指针,并询问父级以找出AddOn的类型。
这有意义吗?
答案 0 :(得分:2)
我有三个对象,每个对象可以执行许多不同的操作。这些对象支持一个附加对象,该对象可以添加到它们可以执行的操作中。根据添加的对象,添加将启用不同的操作。
为什么不使用继承和模板?
struct A {
virtual void action_foo(); // virtual not really needed in this example
};
struct B {
virtual void action_bar();
};
template<class base_t>
struct AddOn1 : base_t {
virtual void action_baz();
};
void func(A& a) {
a->action_foo();
}
// example of use
A x;
B y;
AddOn1<A> z; // add on to A
x.action_foo();
y.action_bar();
z.action_baz();
func(x);
func(z);