【发布时间】:2014-10-01 18:34:41
【问题描述】:
有没有办法在 C++03 编译器中获得等效的 std::underlying_type ?
我知道 boost::type_traits 有一些支持,但那里没有功能齐全的转换器。
【问题讨论】:
标签: c++ std typetraits
有没有办法在 C++03 编译器中获得等效的 std::underlying_type ?
我知道 boost::type_traits 有一些支持,但那里没有功能齐全的转换器。
【问题讨论】:
标签: c++ std typetraits
this 解决方案怎么样?
template< class TpEnum >
struct UnderlyingType
{
typedef typename conditional<
TpEnum( -1 ) < TpEnum( 0 ),
typename make_signed< TpEnum >::type,
typename make_unsigned< TpEnum >::type
>::type type;
};
你可以找到它的构建块(条件,make_signed,make_unsigned in boost::type_traits)
【讨论】:
make_signed 需要 C++11。对不起。我应该删除我的答案吗? ://
make_signed@BillyONEal 呢? :/ 我想不出不使用 C++11 来实现它的方法。
T 类型定义为type,并明确专门化char、short、int 等,其中类型定义@987654330 @、unsigned short、unsigned int 等如type。