【发布时间】:2014-07-16 18:36:01
【问题描述】:
假设我有一个Light 类,还有SpotLight、PointLight 和DirectionalLight,它们继承自Light。
我有一张这样的灯光地图:std::map<std::string, Light*> LightMap;
我想像这样为每种类型迭代这张地图:
for ( /* each SpotLight* in LightMap */ ) { ... }
for ( /* each PointLight* in LightMap */) { ... }
等等……
我该怎么做?
【问题讨论】:
-
听起来像是虚拟函数可以帮助解决的问题。
-
@chris 是的。我就是这么想的。在某些情况下这可能行不通,但通常一个循环调用一个在每个子类中具有不同行为的单个虚函数听起来像是要走的路……
-
如果这是在迭代时需要快速的东西,那么我会将每种类型保留在自己的指针数组中。或者,如果您可以在一个循环中处理所有灯光类型,请使用虚拟函数并循环一次。
-
我想从这些类中检索数据,例如我想要 PointLight 的位置和 DirectionalLights 的方向,PointLight 没有方向,DirectionalLight 没有位置等。我是现在犹豫不决,我想我会使用单独的地图。
-
不要创建单独的地图,而是看高
标签: c++ inheritance iterator iteration stdmap