2014-10-01 52 views
0

有没有办法在C++ 03编译器中获得std :: underlying_type的等价物?C++中的C++枚举的基础类型03

我知道在boost :: type_traits中有一些支持,但是那里没有全功能的转换器。

回答

2

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 :: type_traits)

+0

这是实现在C++编译器11一个underlying_tpye非常奇特的方式。不过,我有一个C++ 03编译器,没有条件或make_signed – Sam 2014-10-01 18:40:38

+0

我只是想着@sammy! 'make_signed'需要C++ 11。抱歉。我应该删除我的答案吗? :/ – gsamaras 2014-10-01 18:41:38

+0

那么'make_signed' @BillyONeal呢? :/我想不出一种不使用C++ 11的方式来实现它。 – gsamaras 2014-10-01 18:43:22