投射整个矢量

Tal*_*eed 4 c++ polymorphism vector static-cast reinterpret-cast

是否有可能投出std::vector<std::shared_ptr<Object>>std::vector<std::shared_ptr<SpecializedObject>>那里SpecializedObject继承Object,无需建立一个新的数组(或通过矢量迭代)?

sky*_*ack 6

简答:不.

答案很长:

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

提示:你仍然可以static_pointer_cast在迭代时使用指针来投射(当然你知道自己在做什么).

  • 这就是C++的工作原理.我不会说羞耻. (4认同)