将类类型存储为映射值并基于映射键初始化新类

时间:2015-01-12 01:28:40

标签: c++ class types

我想编写一个函数,它根据从枚举到类类型的静态映射返回一个新的类实例。

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来达到同样的效果,但使用地图看起来会更清晰。

1 个答案:

答案 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]();
}