我可以定义一个类型作为枚举的基础类型吗?类似这样的:自定义枚举基础类型
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++,有没有办法让一个自定义类型作为一个整型传递?
因此,在这种情况下的“整数类型”与“的std :: is_integral'? – Nelfeal
您发布的示例将颠覆“std :: is_integral”的意图。我不确定在语言中是否有任何东西来阻止这种情况发生。 –
[看起来像''中的任何东西都是未定义的行为。](https://stackoverflow.com/questions/8513417/what-can-and-cant-i-specialize-in-the-std-namespace)。我应该看得更彻底。另外[this](https://stackoverflow.com/questions/25345486/why-specializing-a-type-trait-could-result-in-undefined-behaviour)(感谢HolyBlackCat)。 –
Nelfeal