Итак, у меня есть базовый класс и производный класс:
class BaseClass {
public:
virtual void print() { std::cout << "hi" << std::endl; }
BaseClass() = default;
};
class DerivedClass : public BaseClass {
public:
void print() { std::cout << "bye" << std::endl; }
DerivedClass() = default;
};
У меня также есть std::vector<BaseClass*> list
.
Я хочу иметь функцию, которая извлекает первый экземпляр выбранный класс, аналогичный функции GetComponent движка Unity3D. Вот как я пытался это реализовать:
template <class T>
T* getInstance() {
for(int i = 0; i < (int)list.size(); ++i) {
if(typeid(list[i]) == typeid(T))
return list[i];
}
return nullptr;
}
Может кто-нибудь объяснить мне, что я делаю неправильно?
Редактировать: Я забыл упомянуть, если я были ошибки:
Error C2440 'return': cannot convert from '_Ty' to 'T *'
в строке return list[i];
.
Похоже, не связано с тем, что у меня нет параметра T.
Редактировать 2:
Добавлен Параметр T как временный обходной путь. Код, вызывающий getInstance:
int main() {
getInstance<Derived>(Derived())->print();
return 0;
}