给定 的基类gameObject
和 的派生类animatedGameObject
,我认为将它们的所有实例存储在std::vector
. 如果向量GameObjects
被声明为 的基类型gameObject*
,则派生对象实例需要强制转换。
例子:
vector<gameObject*> GameObjects;
gameObject A* = new gameObject( ...init... );
animatedGameObject B* = new animatedGameObject( ...init... );
GameObjects.push_back(A);
GameObjects.push_back(B);
// to access the animatedGameObject functions:
static_cast<animatedGameObject*>(GameObjects[1])->functionUniqueToAnimated();
像往常一样害怕,我求助于 Scott Meyers(Effective C++,第 3 版),他在这个主题上写道:
许多程序员认为强制转换只会告诉编译器将一种类型视为另一种类型,但这是错误的。任何类型的类型转换(通过强制转换显式或编译器隐式转换)通常会导致代码在运行时执行。
我已经阅读了他的第 27 条:最小化施法两次,但鉴于我对此缺乏经验,我无法回答一个简单的问题“这是一个愚蠢的事情吗?”
我应该提到,与调用无关的事情是一件愚蠢的事情有几个原因static_cast
。这些问题按重要性排序如下:
static_cast
在上面的示例中,我没有看到使用 的一些可能的风险吗?- 有没有比
std::vector
这种方法更好的数据结构?(仅当有一个很明显时,我才不会要求您为我做研究。)
这是我第一次在这里提问,如有必要,请提前道歉。