возвращая std :: shared_ptr <Derived>из вектора std :: shared_ptr <Base> - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть std::vector из shared_ptr<Base>, который содержит много shared_ptr<Derived> объектов. В качестве свойства Base каждый объект имеет string имя по различным причинам. У меня есть функция std::shared_ptr<Base> GetObjectByName(const char* name), где я хочу иметь возможность возвращать производный компонент, оценивая, является ли его имя объектом, который я ищу. Каков наилучший способ получить std::shared_ptr<Derived> от std::vector<std::shared_ptr<Base>>

1 Ответ

1 голос
/ 09 февраля 2020

Предполагая, что Base и Derived являются полиморфными c (т.е. имеют хотя бы одну виртуальную функцию), вы можете использовать std::dynamic_pointer_cast:

std::shared_ptr<Base> pBase = GetObjectByName("name");
std::shared_ptr<Derived> pDerived = std::dynamic_pointer_cast<Derived>(pBase);
...