我想编写一个函数,它根据从枚举到类类型的静态映射返回一个新的类实例。
Base* getBase(Enum e) {
static const map<Enum, class type???> base_map = {
{ EnumA, Derived1 }, // Derived1,2,3 are subclasses of Base
{ EnumB, Derived2 },
{ EnumC, Derived3 },
};
return new base_map[e];
}
是否可以在C ++中执行此操作?如果是这样,那么地图的价值应该是什么类型?
我想我可以用一个很长的if-else
来达到同样的效果,但使用地图看起来会更清晰。
答案 0 :(得分:1)
您可以存储工厂功能 - 这些内容:
Base* getBase(Enum e) {
typedef std::function<Base*()> maker_t;
static const map<Enum, maker_t> base_map = {
{ EnumA, [] { return new Derived1; } },
{ EnumB, [] { return new Derived2; } },
{ EnumC, [] { return new Derived3; } }
};
return base_map[e]();
}