繁体   English   中英

C ++如何设置类型为std :: vector的指针 <Derived*> 到类型为std :: vector的对象 <Base*>

[英]C++ How to set a pointer of type std::vector<Derived*> to object of type std::vector<Base*>

的背景:

我正在用C ++构建一个物理引擎,该引擎计算笛卡尔空间中n体系统的重力演化,然后将其转换为任何预定义的坐标系集。 最终目标是使起始坐标系任意(在坐标系“ n”而不是仅笛卡尔坐标系中进行计算),但这是一个遥远的目标。

问题:

因为该坐标系应该是可互换的,所以我使笛卡尔坐标系扩展了基本坐标系:

class CoordMember {
}

class CoordState {
   public:
      /* methods to operate on members */

   protected:
      std::vector<CoordMember*> members;
}

class Particle : public CoordMember {
}

class CartState : public CoordState {
}

尝试创建类型为std::vector<Particle*>的指针时,该错误指向类型为std::vector<CoordMember*>的成员对象:

CartState* state = new CartState(/* initialization vars */);
std::vector<Particle*>* parts = static_cast< std::vector<Particle*>* >(&state->members);

编译器错误是:

error: static_cast from 'std::vector<CoordMember *> *' to 'std::vector<Particle *> *' is not allowed
error: no viable overloaded '='

就这一点而言,我知道一个事实,即state->members中的数据都属于Particle*类型。 我不知道要做什么才能使这种转换成为可能。 有任何想法吗?

tl; dr:

std::vector<Derived*>* ptr = static_cast< std::vector<Base*>* >(&object);
static_cast from 'std::vector<Derived*>*' to 'std::vector<Base*>*' is not allowed

强制转换不起作用,因为vector 完全不相关 您必须将向量中的每个对象都强制转换。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM