gpt4 book ai didi

c++ - 为什么枚举不能是模板?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:10:24 24 4
gpt4 key购买 nike

enumeration cannot be a template 是我尝试用 BCC64 编译时给出的错误(基于 Clang)以下代码:

template <typename T> enum class fooEnum : T
{
a,b,c,d,e
};

起初,我在想这种明确的禁止是由于 enum 底层类型的限制,如果 enum 底层类型可以被模板化,那么它可能会导致 ill-formed enums,但是当我们试试这个:

template <typename A> struct fooClass
{
enum class fooEnum : A
{
a,b,c,d,e
};
};

只要 A 类型遵循与枚举底层类型相同的限制,它就可以毫无问题地编译,你知道,定义枚举值的表达式:

  • 应该是一个整数常量,大到足以容纳枚举的所有值
  • 每个枚举类型都应与 charsigned/unsigned 整数类型兼容。

如果我们不遵循此规则,(使用类内或全局枚举)将按预期显示另一个特定错误:

enum class fooEnum : fooClass
{
a,b,c,d,e
};

non-integral type 'fooClass' is an invalid underlying type

所以,这就是为什么我想知道为什么明确禁止创建模板枚举,即使已经可以控制基础类型。标准中哪里提到了这个禁令?

感谢您的关注。

最佳答案

根据定义 [C++ 标准 14.1],或者在定义之外,

A template defines a family of classes or functions or an alias for a family of types.

枚举不是这两者,所以它不能是模板。

关于c++ - 为什么枚举不能是模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21914457/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com