是否可以将std::vector<std::shared_ptr<Object>>
转换为std::vector<std::shared_ptr<SpecializedObject>>
SpecializedObject
继承Object
,而不构建新数组(或迭代向量)?
答案 0 :(得分:6)
简答:不。
答案很长:
std::vector<std::shared_ptr<Object>>
和std::vector<std::shared_ptr<SpecializedObject>>
是完全不同且不相关的野兽,您无法从一种类型转换为另一种类型。
您必须遍历该向量并从中创建一个新的。
提示:在迭代时你仍然可以使用static_pointer_cast
来强制转换指针(当然,如果你知道你在做什么的话)。