次の Java の概念を C++ に移植する必要があります。
オブジェクト ID キーとクラス タイプ値を保持するハッシュ マップ:
Map<String, Class> _objectsBank = new HashMap<>();
init メソッドのどこかで、次のようにバンクを埋めます。
_objectsBank .put("CLASS_ID_1", MyClass1.class);
_objectsBank .put("CLASS_ID_2", MyClass2.class);
....
その後、必要に応じてそのバンクに保存されたクラスの 1 つのインスタンスを作成します。「怠惰な」初期化の種類:
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ライブラリにこのようなものはありますか?