投射整个向量

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 转换指针(当然,如果您知道自己在做什么)。