实际上,我不确定使用 theoperator<
或任何其他比较运算符operator==
是否有效,但我没有看到任何其他建议。因此,假设这是有效的,有没有办法使用 SFINAE 确定枚举是否有效?
问问题
196 次
1 回答
3
尽管
std::is_signed<std::underlying_type<EnumType>::type>::value
是可移植的解决方案,但它尚未在所有常用的编译器中可用。从这个问题不清楚你是否也在询问enum class
,或者只是在询问enum
,但也许这种解决方法可以完成这项工作:
#include <iostream>
#include <iomanip>
enum S : int {};
enum U : unsigned {};
enum class SC : int {};
enum class UC : unsigned {};
template< typename E >
struct is_enum_signed {
static const bool value = E(-1) < E(0);
};
int main()
{
std::cout << std::boolalpha
<< is_enum_signed<S>::value << std::endl
<< is_enum_signed<U>::value << std::endl
<< is_enum_signed<SC>::value << std::endl
<< is_enum_signed<UC>::value << std::endl;
}
免责声明:我没有检查它是否符合标准,我只是想提供一个替代方案,您需要验证您的环境的适用性和正确性......
于 2013-09-20T07:26:22.347 回答