嗨!
C ++问题!
我想(在 C ++ 中)检查包含抽象类型A的对象的向量是否包含类型B的对象,其中B是派生自A的类。
为什么?
我需要这个的原因是我试图在 C ++ 中实现基本的实体组件系统。
因此,每种组件类型都将从单个抽象类派生,这让我将它们全部存储在同一向量中。
但是我确实需要某种方式来知道将哪种类型的组件附加到实体上。因此,我还需要一种差异化的方法,这就是我真正需要帮助的地方!
这是一段示例代码,非常简单地说明了我要实现的目标:
class Component
{}
class Rigidbody : public Component
{}
class Mesh : public Component
{}
....
class ContainerClass
{
public:
template<typename T>
bool contains(const T element) const
{
//Return whether or not elements contains an element of type T.
//which has to be a class derived from the Component class,
//but not of abstract type "Component".
//I also need a way of making sure T can only be of a type derived from Component.
}
inline void add(const Component &p_Component)
{
m_Components.push_back(p_Component);
}
private:
vector<Component> m_Components;
}
所以在
ContainerClass test;
B b;
test.add(b);
test.contains(B);应该是真的。
test.contains(C);应该为假。
顺便说一句,我知道在StackOverflow中有一个与此问题类似的问题,但是我所看到的每个解决方案都是特定于编程语言的,不适用于C ++。
至少据我所知。
谢谢!