我可以定义一个类型作为枚举的基础类型吗?像这样:
struct S {
S(int i) : value(i) {}
operator int() { return value; }
int value;
};
enum E : S {
A, B, C
};
错误消息告诉我S必须是整数类型。我试图像下面这样专门化std::is_integral
,但似乎在这种情况下,"整数类型"真的意味着其中一种基本类型。
namespace std {
template<>
struct is_integral<S> : public true_type {};
}
那么,使用任何版本的C ++,有没有办法让自定义类型作为整数类型传递?
答案 0 :(得分:2)
<强>的std :: is_integral 强> 检查T是否为整数类型。提供成员常量值,该值等于true,如果T是
bool
类型,char
,char16_t
,char32_t
,wchar_t
,{{1} },short
,int
,long
或任何实现定义的扩展整数类型,包括任何有符号,无符号和cv限定的变体。否则,value等于false。
这是here的摘录。
这意味着long long
必须使用以下类型之一:
enum
,bool
,char
,char16_t
,char32_t
,wchar_t
,short
,int
,long
。
答案 1 :(得分:2)
我可以定义一个类型作为枚举的基础类型吗?
您只能使用整数类型来定义enum
,而不是任何旧类型。
例如,您可以使用
enum E : char {
A, B, C
};
表示E
的值为char
类型。但你不能使用
enum E : S {
A, B, C
};
类型
bool
,char
,char16_t
,char32_t
,wchar_t
以及有符号和无符号整数类型统称为整数类型。整数类型的同义词是整数类型。