クラス生成をマップ化
#include <memory> #include <stdio.h> #include <string> #include <map> template<typename T, typename U> class ICreator { public: virtual ~ICreator(){} static T* Creator(){ return new U; } }; class Base { public: virtual ~Base(){} virtual void print() = 0; }; class A : public Base, public ICreator<Base, A>{ void print(){ printf("Aクラスだお。\n"); } }; class B : public Base, public ICreator<Base, B>{ void print(){ printf("Bクラスだお。\n"); } }; int main() { typedef Base* (*Func)(); std::map<std::string, Func> class_map; class_map["Aクラス"] = &A::Creator; class_map["Bクラス"] = &B::Creator; std::unique_ptr<Base> b; b.reset(class_map["Aクラス"]()); b->print(); b.reset(class_map["Bクラス"]()); b->print(); return 0; }
多重継承だおw。なんとエラー処理書いてないおww