【发布时间】:2016-05-12 13:20:45
【问题描述】:
基本上,我有两个类,Spatial 和 Node,继承自 IEntity; IEntity 是一个抽象类(接口)。我将实体 object pointers 存储在 SceneGraph 类的 std::vector 中,例如 std::vector<IEntity*> 所以为了区分 Spatials 和 Nodes,我首先有了这样做的想法
if(!dynamic_cast<Node*>(myEntity)) // equals nullptr, cast failed
{
BOOST_LOG_TRIVIAL(info) << "It is a node !";
}
但是这段代码将用于高性能引擎,我无法在一秒钟内承受数千/数百万次动态转换调用;那么,您建议如何区分空间指针和节点以向下转换而不会出现任何错误(以最快的方式)? PS。我知道不建议将指针存储在 stl 容器中,但这是围绕 imo 的最佳方式。
【问题讨论】:
-
这取决于你想如何处理向下转换的对象?
-
好吧,在场景图中,我需要区分节点实体和空间实体(基本上是网格)以:解析节点或渲染空间(节点包含其他实体;它们基本上是数组,带有额外的变换组件)
-
是否可以将动作抽象为
IEntity中的虚函数?然后你可以在Spatial和Node中覆盖它。 -
你的意思是像一个虚函数 IsNode() ?这两个类之间唯一的共同点是它们是实体并且有一个变换组件。但由于我的 API 设计,它们需要存储在一起
-
@Coder32 您是否认为这可能表明 API 设计存在缺陷?