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

我希望私有成员函数采用无符号的任何字符类型。如果 charT 是 char16_t、char32_t、wchar_t,我希望签名是unsigned that。我怎样才能做到这一点?

4

1 回答 1

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 );
};
于 2014-05-05T08:55:57.680 回答