Downcast до шаблонного класса
У меня есть шаблон класса, и я хотел, чтобы вектор этого типа класса. Я видел решение, в котором вам нужно обернуть класс другим классом без шаблона, а затем получить вектор этого нового класса. Теперь я хочу понизить, например, один из объектов списка, но приведение не разрешено. Что я должен делать?
Пример:
class Wrapper
{
}
template <typename T>
class Father : public Wrapper
{
}
int main()
{
std::vector<std::shared_ptr<Wrapper>> objects;
Father<int> object = (Father<int>)objects.at(0); // ERROR (lets say i know its integer)
}
2 ответа
objects[0]
это указатель на объект. Ваш актерский состав (кстати, никогда не использует C-стиль) пытается конвертировать shared_ptr<Wrapper>
возражать против Father<int>
объект. Конечно, это невозможно, поскольку эти два типа совершенно не связаны.
Разыменуйте указатель и уменьшите его до ссылки (если вы хотите полиморфизм):
auto& object = static_cast<Father<int>&>(*objects[0]);
Вам не нужно оборачивать свой шаблонный класс, чтобы иметь возможность создавать вектор с его типом.
Это будет работать просто отлично
std::vector<std::shared_ptr<Father<int>>> objects;
std::shared_ptr<Father<int>> object = objects.at(0);