2014-10-01 1 views

ответ

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

Это очень необычный способ реализовать underlying_tpye в С ++ 11 компилятором в ... Тем не менее, У меня есть компилятор C++ 03, без условных выражений или make_signed – Sam

+0

Я просто думал об этом @sammy! 'make_signed' требуется C++ 11. Сожалею. Должен ли я удалить свой ответ? :/ – gsamaras

+0

А как насчет 'make_signed' @BillyONeal? :/Я не могу придумать способ реализовать его, не используя C++ 11. – gsamaras