我需要将以下Java概念移植到C ++中:

包含对象id键和类类型值的哈希图:

 Map<String, Class> _objectsBank = new HashMap<>();


在init方法的某个地方,我像这样填充了银行:

    _objectsBank .put("CLASS_ID_1", MyClass1.class);
    _objectsBank .put("CLASS_ID_2", MyClass2.class);
    ....


然后,稍后,我构造了一个按需保存在该银行中的类之一的实例。
一种“懒惰”的初始化:

 private MyClass initNewProg(String name) {

    MyClass instance;


    try {

        Class cl = _objectsBank.get(name);
        java.lang.reflect.Constructor co = cl.getConstructor(String.class);
        instance= (MyClass) co.newInstance(name);
        return instance;

    } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e)
    {
        e.printStackTrace();
        return null;
    }
 }


我将如何在C ++中实现呢?如何将类类型设置为std :: map值,以便以后可以查询它以从中构造合适的实例?
Boost库中是否有类似的东西?

最佳答案

看一下Is there a way to instantiate objects from a string holding their class name? Instantiating classes by name with factory pattern,它们描述了问题以及每种方法的优缺点。这些示例涵盖了类的构造函数的注册,这可以解决@Karthik T解决方案中提到的多个if语句的问题。

09-09 18:13