投射整个向量
Cast an entire vector
是否可以将 std::vector<std::shared_ptr<Object>>
转换为 std::vector<std::shared_ptr<SpecializedObject>>
,其中 SpecializedObject
继承 Object
,而无需构建新数组(或遍历向量)?
简答:没有。
长答案:
std::vector<std::shared_ptr<Object>>
和 std::vector<std::shared_ptr<SpecializedObject>>
是完全不同且无关的野兽,您不能从一种类型转换为另一种类型。
您必须遍历向量并从中创建一个新向量。
提示:您仍然可以在迭代时使用 static_pointer_cast
转换指针(当然,如果您知道自己在做什么)。
是否可以将 std::vector<std::shared_ptr<Object>>
转换为 std::vector<std::shared_ptr<SpecializedObject>>
,其中 SpecializedObject
继承 Object
,而无需构建新数组(或遍历向量)?
简答:没有。
长答案:
std::vector<std::shared_ptr<Object>>
和 std::vector<std::shared_ptr<SpecializedObject>>
是完全不同且无关的野兽,您不能从一种类型转换为另一种类型。
您必须遍历向量并从中创建一个新向量。
提示:您仍然可以在迭代时使用 static_pointer_cast
转换指针(当然,如果您知道自己在做什么)。