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