投射整个向量

时间:2017-03-20 16:23:29

标签: c++ vector polymorphism reinterpret-cast static-cast

是否可以将std::vector<std::shared_ptr<Object>>转换为std::vector<std::shared_ptr<SpecializedObject>> SpecializedObject继承Object,而不构建新数组(或迭代向量)?

1 个答案:

答案 0 :(得分:6)

简答:不。

答案很长:

std::vector<std::shared_ptr<Object>>std::vector<std::shared_ptr<SpecializedObject>>是完全不同且不相关的野兽,您无法从一种类型转换为另一种类型。
您必须遍历该向量并从中创建一个新的。

提示:在迭代时你仍然可以使用static_pointer_cast来强制转换指针(当然,如果你知道你在做什么的话)。