有没有办法在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中的现有解决方案,除非它是少数几行,否则我不想自己动手。
答案 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 时很好。