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,我希望签名无符号那个。我怎么能这样做?
答案 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 );
};