c++ - 类型独特元素的容器

标签 c++

我知道问题标题有点含糊,所以至少感谢您阅读它 ;-)

我的情况是这样的:我有一组类CommandACommandB,...派生自一个普通的纯抽象基类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/

相关文章:

c++ - 将指针存储在数组中

c++ - cmake:不需要时添加 C++ 标准

c++ - 将 std::chrono::system_clock::time_point 转换为 struct timeval 并返回

c++ - 捕获运行时异常

c++ - Cpp 错误,在 Visual Studio 2012 中包含多个文件

c++ - 来自 .dll 的函数在 vb.net 中失败,但在 vb6 中有效

c++ - 转换 Classname::FunctionName( Para1, Para2 ) 中的符号

c++ - 在集合上调用成员方法

c++ - 如何在单个文件中存储多个随机 blob?

c++ - GNU C++ : why custom class can not be value type for unordered_map?