【发布时间】:2014-06-11 01:39:27
【问题描述】:
我有不同的Components集合,其中每个Component子类化一个抽象类IComponent。IComponent定义了一个纯虚函数virtual ID_TYPE getId() = 0;,所以每个组件都需要为它创建一个实现。
考虑到每个组件只能添加一次,所以它的 ID 对所有实例和集合函数都相等
IComponent* ICollection::getComponent(const ID_TYPE);
我想要一个额外的 static 方法,就像上面描述的那样,以便在不需要创建实例(可能没有默认构造函数)的情况下检索组件的 ID像
collection1.getComponent(MyComponentA::getId())->something();
collection2.getComponent(MyComponentA::getId())->something();
我知道没有虚拟静态成员之类的东西,静态方法不能被覆盖。但是是否有其他方法可以确保IComponent 的每个子类都定义了这样的静态方法?
【问题讨论】:
-
anything 怎么知道不存在的
Component的ID(它还没有被创建)? -
如果你调用它并且它不存在,你会得到一个编译错误,所以我不太明白问题是什么。 (而且它是“覆盖”,而不是“覆盖”,因为动词是“覆盖”。)
-
@PaulEvans ID 是静态的,每个组件都是唯一的
-
在这种情况下可能可以使用C++ traits concept
-
你可以通过创建多种方法来做你想做的事:stackoverflow.com/a/1820676/1098041 不过我不确定这是一个好习惯。
标签: c++