EDITпреобразования в вектор указателей уникальных базового класса
В соответствии с просьбой, я обеспечиваю пример:
#include <iostream>
#include <vector>
#include <memory>
using namespace std;
class Animal
{
public:
virtual void printName() = 0;
};
class Dog: public Animal
{
public:
virtual void printName() { cout << "Dog" << endl; }
};
class Cat: public Animal
{
public:
virtual void printName() { cout << "Cat" << endl; }
};
int main()
{
vector<vector<unique_ptr<Animal>> *> groups_of_animals;
vector<unique_ptr<Dog>> dogs;
vector<unique_ptr<Cat>> cats;
dogs.push_back(unique_ptr<Dog>(new Dog));
dogs.push_back(unique_ptr<Dog>(new Dog));
cats.push_back(unique_ptr<Cat>(new Cat));
groups_of_animals.push_back(reinterpret_cast<vector<unique_ptr<Animal>> *>(&dogs));
groups_of_animals.push_back(reinterpret_cast<vector<unique_ptr<Animal>> *>(&cats));
for(auto &group: groups_of_animals)
for(auto &animal: *group)
(animal) -> printName();
return 0;
}
Выход: Собака Собака Кошка
Пользуется переосмысливать бросание безопасным и оправданным здесь? Статический бросок не работает.
PS Я нашел эту тему: I want a vector of derived class pointers as base class pointers, но в моей ситуации я использую unique_ptr и хочу, я не хочу, чтобы обновить все вектора как только я обновить некоторый ребенок вектор. Я просто хочу иметь указатели на эти дочерние векторы.
Возможно, вы можете показать пример ввода и вывода, потому что я не понимаю ваш вопрос, как написано. – erip