2010-03-16 30 views
7

有沒有辦法在C++中得到一個帶符號整型的無符號等價(相同大小)?我沿線的思考:如何獲得在C++中的整型無符號等價物?

template<typename T> 
struct get_unsigned { }; 

template<> 
struct get_unsigned<int> { 
    typedef unsigned int type; 
}; 

... 

template<typename T> 
void myfunc(T val) { 
    get_unsigned<T>::type u = std::abs(val); 
    ... 
} 

我正在尋找在標準庫或加速現有的解決方案,並且不希望推出自己的,除非它是線的屈指可數。

回答

8

Boost.TypeTraits具有make_unsigned

類型:如果T是一個無符號的整數類型,那麼相同類型爲T,如果T是一個符號整型那麼相應的無符號類型。否則,如果T是枚舉類型或字符類型(char或wchar_t),則使用與T寬度相同的無符號整數類型。如果T具有任何cv限定符,則這些也存在於結果類型中。

The source遠不止於少數幾行。

+0

這已被添加到C++ 11中的stdlib,可以預見爲'std :: make_unsigned':http://www.cplusplus.com/reference/type_traits/make_unsigned/ – 2016-08-29 12:19:40

相關問題