В настоящее время я работаю над своим игровым двигателем и начал выполнять фундаментальные функции для моей системы компонентов объекта. Я хочу иметь метод, который добавляет новые компоненты. Чтобы быть уверенным, что только допустимые типы могут быть добавлены в список, я использовал оператор IF. Но при тестировании этой функции: < /p>
template
void AddComponent() {
bool state = std::is_base_of::value;
if (!state) {
std::string TypeName = typeid(T).name();
LOGERROR(TypeName + " IS NOT A COMPONENT");
return;
}
else {
std::string TypeName = typeid(T).name();
LOG(TypeName + " IS A COMPONENT");
componentList.emplace_back(std::make_shared());
}
}
int main(void)
{
//For example i added an invalid type Camera.
GameObject* gameObject = new GameObject;
gameObject->AddComponent();
delete gameObject;
}
< /code>
... Это бросили мне ошибку: < /p>
C2655 no overloaded function could convert all the argument types
< /code>
Я не понимаю, почему она дает мне эту ошибку, поскольку блок Else будет выполняться только тогда, когда тип действителен. < /p>
Некоторые подробности: < /p>
AddComponent является участником GameObject < /li>
Components Components. /> T следует добавить только в том случае, если он получен из класса компонентов (E.X. Transform) < /li>
< /ul>
Подробнее здесь: https://stackoverflow.com/questions/789 ... conditions