Проверить, содержит ли список абстрактных элементов элемент определенного производного типа в 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++.
По крайней мере, насколько я знаю.
Спасибо!