Проверить, содержит ли список абстрактных элементов элемент определенного производного типа в C++?

Привет!

C++ проблема!

Я хочу проверить (в C++), если вектор, который содержит объекты абстрактного типа A, содержит объекты типа B, где B является классом, производным от A.

Зачем?

Мне нужно это потому, что я пытаюсь реализовать базовую Entity-Component System в 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 (В); Должно быть правдой.

  • test.contains (C); Должно быть ложным.

Кстати, я знаю, что в Stackru есть несколько похожих на этот вопрос вопросов, но каждое отдельное решение, которое я видел, зависит от языка программирования и не относится к C++.

По крайней мере, насколько я знаю.

Спасибо!

0 ответов

Другие вопросы по тегам