自定义枚举底层类型

Nel*_*eal 5 c++ enums

我可以定义一个类型作为枚举的基础类型吗?像这样的东西:

struct S {
    S(int i) : value(i) {}
    operator int() { return value; }

    int value;
};

enum E : S {
    A, B, C
};
Run Code Online (Sandbox Code Playgroud)

错误消息告诉我S必须是整数类型.我试图std::is_integral像下面那样专注,但似乎在这种情况下,"整数类型"实际上意味着其中一种基本类型.

namespace std {
    template<>
    struct is_integral<S> : public true_type {};
}
Run Code Online (Sandbox Code Playgroud)

那么,使用任何版本的C++,有没有办法让自定义类型作为整数类型传递?

R S*_*ahu 3

我可以定义一个类型用作枚举的基础类型吗?

您只能使用整型来定义enums,而不能使用任何旧类型。

例如,您可以使用

enum E : char {
    A, B, C
};
Run Code Online (Sandbox Code Playgroud)

指示 的值E将属于类型char。但你不能使用

enum E : S {
    A, B, C
};
Run Code Online (Sandbox Code Playgroud)

来自C++11 标准 3.9.1/7

类型boolcharchar16_tchar32_twchar_t以及有符号和无符号整数类型统称为整型。整型的同义词是整型。

  • [看起来专门化`&lt;type_traits&gt;`中的任何内容都是未定义的行为。](/sf/ask/595939221/​​an-and-cant-i-specialize-in-the-std-namespace)。我应该看得更彻底。还有[这个](/sf/ask/1774184051/)(感谢HolyBlackCat)。 (3认同)