Извлечение указанного элемента типа класса c из вектора базового класса в C ++ - PullRequest
0 голосов
/ 01 апреля 2020

Итак, у меня есть базовый класс и производный класс:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...