枚举不能是模板是我尝试用
BCC64(基于Clang)编译时给出的错误代码如下:
template <typename T> enum class fooEnum : T
{
a,b,c,d,e
};
起初,我认为这个明确禁止是由于enum底层类型限制,如果enum底层类型可能被模板化,那么它可能导致形成不良的枚举,但是当我们尝试这样做时:
template <typename A> struct fooClass
{
enum class fooEnum : A
{
a,b,c,d,e
};
};
只要A类型遵循与enum底层类型相同的限制,它就可以编译而没有问题,你知道,定义枚举值的表达式:
>应该是一个足够大的整数常量,以适应枚举的所有值
>每个枚举类型应与char或有符号/无符号整数类型兼容.
如果我们不遵循此规则(使用类内或全局枚举),则会出现另一个特定错误,如预期:
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.
枚举既不是这些,也不是模板.