C ++从模板动态创建某种类型

时间:2017-10-19 01:50:24

标签: c++

我有一个模板

enum MyEnum = {MyEnum _1, MyEnum _2, ...};
template<MyEnum T>
struct MyStruct {
    ...
}

现在我想基于条件创建特定类型的模板。但是,MyEnum中有一些开放的元素,所以我无法通过某种切换来实现它。

所以我正在寻找一种方法来做像

这样的事情
void doStuff() {
    MyEnum e = getType();
    MyStruct<e> s;
}

但编译器抱怨e不是常量表达式。因为我有运行时信息所以它为什么这样做是有道理的。有没有办法优雅地构建模仿

的东西
doStuff() {
    MyEnum e = getType();
    Switch(e) {
        case MyEnum_1: 
            MyStruct<MyEnum_1> s;
            ....
        case MyEnum_2: ...
    ...
}

原因是,如前所述,枚举列表可能会定期扩展/更改,我宁愿不必每次都在其他目的上维护代码。

1 个答案:

答案 0 :(得分:-1)

也许这样的事情应该有效:

MyStruct<decltype(e)> var;