我有一个模板
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: ...
...
}
原因是,正如前面提到的,枚举列表可能会定期扩展/更改,我不希望每次发生这种情况时都必须在其他端维护代码。
发布于 2017-10-19 09:54:08
也许像这样的东西应该行得通:
MyStruct<decltype(e)> var;
https://stackoverflow.com/questions/46821724
复制相似问题