我知道问题标题有点含糊,所以至少感谢您阅读它 ;-)
我的情况是这样的:我有一组类CommandA
、CommandB
,...派生自一个普通的纯抽象基类ICommand
。现在我需要将这些派生类的实例保存在某种容器中,但有一个限制,即在任何时候容器内只允许每个派生类型中的一个。相反,当一个已经存在的派生类型的项目被插入到集合中时,就会用新的实例替换现有的实例。
此外,还需要根据项目的类型从集合中删除项目。
我假设这需要在运行时进行某种类型的识别。我已经排除了 C++ 编译器提供的 Runtime-Type-Identification,因为我们可能在某些时候需要在(尚未知的)较旧的编译器上编译项目。因此,大多数机智的模板技巧也可能退出游戏。但坦率地说,我仍然非常感谢不手动为我的派生类分配一些数字标识符...
我很感激关于这个问题的每一个提示。
提前致谢
阿恩
最佳答案
如果您不能使用模板或 RTTI,您可以这样做
class ICommand
{
virtual void *getStaticId() = 0;
}
int bar;
void* CommandA::getStaticId()
{
return &bar;
}
int foo;
void* CommandB::getStaticId()
{
return &foor;
}
你可以使用每个类的静态变量地址作为它们的typeid
关于c++ - 类型独特元素的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6142818/