c++ - 将 ID 号映射到类

标签 c++ class

我正在建立一个系统,在该系统中,我可以根据从文件中读入的一些信息即时实例化类。所以,这必须在运行时完成。所讨论的类是多态的,并且都继承自 CBaseTheoryEnt 类。我想要做的是将 ID 号与每个类相关联(例如,使用无序映射)。本质上,我的管理类将查看从输入文件中读入的一系列 ID 号,然后实例化适当的类。将类与 ID 相关联然后根据输入实例化它们的理想且有效的方法是什么?

最佳答案

一种方法是使用模板函数来实例化 CBaseTheoryEnt 的子类:

template<typename T>
CBaseTheoryEnt* instantiator() {
    return new T;
}

然后为派生自 CBaseTheoryEnt 的每个类创建一个 hash_map 或这些函数的数组,并将该类的键与其实例化器相关联。然后,当您索引数组或映射时,您会得到一个函数,该函数在被调用时将返回一个指向相应类实例的指针。

例如,如果您有 A、B 和 C 类,并且 A 的 id 为 0,B 为 1,C 为 2,您将拥有:

typedef CBaseTheoryEnt* (*instantiator_ptr)();
instantiator_ptr classes[] = {
    &instantiator<A>,
    &instantiator<B>,
    &instantiator<C>
};

然后像这样使用它

int idx = get_class_id();

CBaseTheoryEnt* inst = classes[idx]();

关于c++ - 将 ID 号映射到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8031149/

相关文章:

c++ - 特定情况下的类析构函数

c++ - 对 2 个 "linked"数组进行排序的更好方法?

c++ - 无锁 C++ 数据结构,不可能吗?

c++ - 加入线程时出现异常

c# - 无法添加到类对象中的列表

java - 我输入的分数总是返回 0?

c++ - std::vector 的指针 std::vector

c++ - std::promise<R&> 的存储: "communicate objects"

php - 在一个类中混合静态和非静态方法是否可以接受?

c++ - 有一个类方法/变量只能从另一个类访问吗?