我需要将以下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语句的问题。