【发布时间】:2017-09-28 00:37:06
【问题描述】:
考虑一个包含组件映射的类,其中每个组件都由其类型标识,这意味着每个 Component 在其类型上都是唯一的。
std::map<std::type_index, Component*>
使用模板和typeof,我为这些组件创建了一个getter:
Physics *p = object.get<Physics>();
我已经很满意了,但是有没有办法将这种模板类型用作索引器?像这样的:
Physics *p = object[Physics];
【问题讨论】:
-
不确定,但是您可以重载
operator[],但它需要将值作为参数,如果可以将其称为objects[Physics()],则可以通过创建临时的开销来实现对应的类型。否则你可能需要一些宏魔法 -
旁注:如果您已经在使用模板,那么将它们专门用于某些类型会“更好”,而不是使用 if 链来比较类型。
-
你希望这是什么类型的
object.get[rand()%2?Physics:Biology]? -
使用 typeid 和它的哈希值怎么样?
标签: c++ templates syntactic-sugar indexer