如何在C ++中获得无符号等价的整数类型?

时间:2010-03-16 01:46:02

标签: c++ templates

有没有办法在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);
    ...
}

我正在寻找标准库或Boost中的现有解决方案,除非它是少数几行,否则我不想自己动手。

2 个答案:

答案 0 :(得分:8)

Boost.TypeTraits有make_unsigned

  

type:如果T是无符号整数类型,则与T相同,如果T是有符号整数类型,则为相应的无符号类型。否则,如果T是枚举或字符类型(char或wchar_t),则是无符号整数类型,其宽度与T相同。

     

如果T有任何cv限定符,那么它们也会出现在结果类型上。

The source不仅仅是少数几行。

答案 1 :(得分:0)

正如 underscore_d 对“James McNellis”的回答所评论的,现在可以使用标准的 std::make_unsigned 函数:https://cplusplus.com/reference/type_traits/make_unsigned

当您不想为此使用 boost 时很好。