【发布时间】:2021-11-28 23:38:48
【问题描述】:
作为标题,我有一个奇怪的要求。 代码示例:
class Base{
}
class Derived: Base{
}
//I want cast that.
shared_ptr<vector<Derived*>> -> shared_ptr<vector<Base*>>
这是我的方式:
shared_ptr<vector<Derived*>> derived_vector_sp;
auto* base_vector_rawptr = (vector<Base*> *)derived_vector_sp.get();
shared_ptr<vector<Base*>> base_vector_sp = make_shared<<vector<Base*>>>(*base_vector_rawptr);
它有效。但是通过这种方式我创建了anthor向量。两个shared_ptr管理两个不同的vecotr。
那么有没有办法直接结束这个案子?比如:
//this way doesn't work.
shared_ptr<vector<Base*>> base_vector_sp = static_pointer_cast<vector<Base*>>(derived_vector_sp);
【问题讨论】:
-
你不能。将
Dog*的向量视为Animal*的向量意味着您可以向其添加Cat*。 -
您不能将
vector<ptr*>从一种ptr类型转换为另一种类型。不支持。 -
听起来像是 XY 问题。您应该解释为什么需要这样做,对于该问题可能有更好/不同的解决方案。
标签: c++ vector shared-ptr stdvector