【发布时间】:2015-05-03 22:27:53
【问题描述】:
我在使用“std::vector::insert”的插入函数将我的子类静态转换为父类时遇到了一些困难
这里有一些代码来了解我想要做什么:
mInstancedObjects.insert(mInstancedObjects.end(), mGates.begin(), mGates.end());
mInstancedObjects.insert(mInstancedObjects.end(), mProjectiles.begin(), mProjectiles.end());
mInstancedObjects.insert(mInstancedObjects.end(), mSwitches.begin(), mSwitches.end());
mInstancedObjects.insert(mInstancedObjects.end(), mPitfalls.begin(), mPitfalls.end());
在这种情况下,向量:mInstancedObjects 是一个指向名为 gameObj 的抽象类的指针向量。
函数的第二个和第三个参数是指向子类的指针向量,它也继承自gameObj。
我不能为了我的生命,找出正确的方法将静态转换指针插入向量mInstancedObjects
这是正确的方法吗?
我的猜测是我必须遍历每个元素并手动静态转换 obj,然后将 obj 推回 mInstancedObjects 向量。然而,这似乎相当笨拙和笨重,因为我会做不必要的循环。
提前致谢。
【问题讨论】:
-
应该不需要强制转换 - 派生类指针可以隐式转换为基类指针,您使用
insert应该可以正常工作。假设向量如您所描述的那样。也许您可以发布他们的声明和错误消息。 -
Works 我。
-
这是目前的错误,我省略了其余的,因为它们都具有相似的效果。
Error 1 error C2440: 'initializing' : cannot convert from 'c_Gate' to 'c_Object *' c:\program files (x86)\microsoft visual studio 12.0\vc\include\xmemory0 600 -
您正在尝试将
c_Gate的实例转换为父指针。 -
这就是我真正想要实现的目标,因此是关于如何优雅高效地静态转换 c_Gate 的问题,最好不要在其父指针中使用循环。
标签: c++ vector polymorphism abstraction static-cast