在C++中,我定义了一系列结构...
struct Component {};
struct SceneGraphNode : Component {};
struct Renderable : Component {};
struct Health : Component {};这些很容易成为类,我被告知在C++中几乎没有什么不同。
在Java语言中,可以声明一个Component类型的数组,并将任何从(继承) Component扩展的类放入其中。Java认为它们都是组件,因为一切都使用智能指针,Java的“数组”实际上只是一组大小相同的智能指针。
然而,我知道Java处理数组与C++有很大的不同。当我检查每个结构的大小时,我得到了以下结果。
Component                   // 4
SceneGraphNode : Component  // 8
Renderable : Component      // 8
Health : Component          // 20这并不令人惊讶。现在,当我创建一个组件数组时,块的大小显然将是4(字节),这将无法容纳任何其他结构。
所以我的问题是,如何存储Components的松散列表(即可以存储从组件继承的任何类/结构的列表)?在Java中,这是非常简单的。当然,在C++中肯定有一种简单的方法可以做到这一点。
发布于 2013-04-18 11:24:49
您可以按如下方式存储它们
std::vector<Component *> components;
Component * c = new Health;
components.push_back( c );调用components[0] -> method();将调用Health的method()
这就是在C++中实现多态性的方式。
还要确保组件的method()为virtual
https://stackoverflow.com/questions/16073912
复制相似问题