2014-10-01 69 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