给定一个基类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();
Run Code Online (Sandbox Code Playgroud)
像往常一样害怕,我转向Scott Meyers(Effective C++,3rd Edition),他写了这个主题:
许多程序员认为演员表什么都不做,只是告诉编译器将一种类型视为另一种类型,但这是错误的.任何类型的转换(通过强制转换显式或由编译器隐式)通常会导致在运行时执行的代码.
我已经阅读了他的第27项:最小化铸造两次,但鉴于我对此缺乏经验,我正在努力解决一个简单的问题"这是一个难以理解的事情吗?"
我应该指出,有几个原因,这是一个愚蠢的事什么都没有做与调用static_cast.按重要性排列的问题是:
static_cast在上面的示例中没有看到使用可能存在的风险吗?std::vector这些方法更好的数据结构?(只有当有一个显而易见的时候,我才会要求你为我做研究.)这是我第一次在这里提问,所以必要时提前道歉.