>>331
関数ポインタでも使ってみる?
class derived1;
base* create_derived1(){return new derived1();}

class derived2;
base* create_derived1(){return new derived2();}

map<string,base* (*)()> classmap;
classmap["derived1"] = create_derived1;
classmap["derived2"] = create_derived2;