【问题标题】:How can I use a enum variable as template argument?如何使用枚举变量作为模板参数?
【发布时间】:2021-04-04 02:29:35
【问题描述】:

如果我们有一个枚举类型:

enum E {
   E1,
   E2,
   // ...
};

并基于E,一个类模板:

template <E T>
class C { /* ... */ };

有没有办法将E 类型的已声明变量用作模板参数?

示例代码:

E example_type = E1;
C<example_type> example_class;

【问题讨论】:

  • 也许this 回答了您的问题?它使用函数参数而不是局部/全局变量。
  • 如果变量是constexpr,是的。
  • 您能澄清一下您的示例代码吗?目前还不清楚你想要什么,你使用C没有意义
  • 有什么理由不使用C&lt;E1&gt;
  • 取决于一个字符串,我需要返回一个枚举类型。我想在另一种方法中直接使用该类型。

标签: c++ class c++11 templates enums


【解决方案1】:

对于整数(即枚举)和算术类型,实例化期间提供的模板参数必须是constant expression。例如:

enum E {
   E1,
   E2,
};


template <E enum_val>
class Foo {
};

int main() {

    constexpr E var = E1;
    const E var2 = E2;
    Foo<var> foo;
    Foo<var2> foo2;

    E var3 = E2;
    Foo<var3> foo3;  // error: the value of ‘var3’ is not usable in a constant expression 
}

【讨论】:

    猜你喜欢
    • 2012-04-16
    • 2012-02-25
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    • 1970-01-01
    相关资源
    最近更新 更多