将任何已签名的char类型转换为无符号的char类型

时间:2014-05-05 08:51:25

标签: c++ templates char wchar

template< typename charT >
struct serializer
{
    /* ... */
private:
    std::basic_string< charT > base64_encode( unsigned charT * bytes, unsigned length );
};

我希望私有成员函数采用 unsigned whatever-char-type。如果charT是char16_t,char32_t,wchar_t,我希望签名无符号那个。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用std::make_unsigned,它适用于任何整数类型:

template<typename T>
typename std::make_unsigned<T>::type convert(T const& input)
{
    return static_cast<typename std::make_unsigned<T>::type>(input);
}

在您的课程中使用它会在直接使用时变得相当丑陋,因此我们将添加一个类型别名:

template< typename charT >
struct serializer
{
    typedef typename ::std::make_unsigned<charT>::type ucharT;
    /* ... */
private:
    std::basic_string< ucharT > base64_encode( ucharT * bytes, unsigned length );
};