我想编写一个函数,根据从枚举到类类型的静态映射返回一个新的类实例。
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++ 中执行此操作?如果是这样, map 的值(value)应该是什么类型?
我想我可以使用很长的 if-else
来达到同样的效果,但使用 map 似乎更干净。
最佳答案
您可以存储一个工厂函数 - 大致如下:
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]();
}
关于c++ - 将类类型存储为映射值并根据映射键初始化新类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894130/