У меня есть объект класса
Entity
, который содержит список компонентов
std::list<Component*> m_components
Сами компоненты представляют из себя классы, наследуемые от базового класса
Component
С помощью функции
bool HasComponent<T>
я могу проверить наличие определенного компонента:
template<typename T> bool HasComponent<T> {
T instance; //создаю экземпляр компонента
for (auto component : m_components) //for each
if (component->GetType() == instance.GetType()) { //если типы компонентов совпадают
return true; //возвращаем true
}
//...
Entity mario;
if (mario.HasComponent<Velocity>) print("Mario can move!"); //пример использования
Но как мне одной функцией проверить наличие сразу нескольких компонентов?
bool HasComponents<Health, Velocity, Sprite>();
Я знаю что это можно реализовать с помощью
вариативных шаблонов, но нахожу их применение лишь с аргументами, вроде этого:
void foo(Args... args)
.
Вопрос: Как реализовать алгоритм для моего случая?