检查抽象元素列表是否包含C ++中某个派生类型的元素?

时间:2018-08-12 15:30:40

标签: c++ oop derived-class abstraction entity-component-system

嗨!

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 ++。

至少据我所知。

谢谢!

0 个答案:

没有答案