微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用枚举变量作为模板参数?

如何解决如何使用枚举变量作为模板参数?

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

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

并基于 E一个类模板:

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

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

示例代码

E example_type = E1;
C<example_type> example_class;

解决方法

对于整数(枚举是)和算术类型,实例化期间提供的模板参数必须是 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 
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。