Как получить беззнаковый эквивалент целочисленного типа в C ++? - PullRequest
7 голосов
/ 16 марта 2010

Есть ли способ получить беззнаковый эквивалент (такого же размера) целочисленного типа со знаком в 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 и предпочитаю не свернуть свое собственное решение, если это не несколько строк.

1 Ответ

8 голосов
/ 16 марта 2010

Boost.TypeTraits имеет make_unsigned:

тип: Если T является целым типом без знака, то тот же тип, что и у T, если T является целочисленным типом со знаком, то соответствующий тип без знака. В противном случае, если T является перечисляемым или символьным типом (char или wchar_t), тогда целочисленный тип без знака такой же ширины, как и T.

Если в T есть какие-либо cv-квалификаторы, они также присутствуют в типе результата.

Источник гораздо больше, чем несколько строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...