2013-04-04 68 views
8

我想在模板中使用未签名的T:声明一个“无符号T”

template<class T> 
void signed2unsigned(const T* source, unsigned T* dest, size_t n) 
    { 
    do 
     { 
     intmax_t s=*source; 
     s+=min(*source); 

     *dest=s; 

     ++dest; 
     ++source; 
     --n; 
     } 
    while(n!=0); 
    } 

这是不行的,因为签名没有T型前扩展到unsigned int的考虑。除了引入U并在文档中写入U必须是未签名的T之外,是否有解决方法?

+3

如何['标准:: make_unsigned'(http://en.cppreference.com/w/cpp/types/make_unsigned)? – 2013-04-04 08:33:08

回答

2

可以使用std::make_unsigned<T>::type

+0

除了克++(tdm64-1)4.7.1不 模板找到它 空隙signed2unsigned(常量T *源,标准:: make_unsigned ::类型* DEST,为size_t N) 和我有 - STD = C++ 11 给 '的std :: make_unsigned ::型' 不是一个类型 – user877329 2013-04-04 08:43:19

+0

使用typedef的std :: make_unsigned ::类型T_type – 4pie0 2013-04-04 08:49:11

+0

尽管它已经编译,它实际上打破的想法使用模板,因为我无法将typedef作为模板。 – user877329 2013-04-04 08:53:43

11

std::make_unsigned<T>::type是你似乎在寻找。