2013-04-04 69 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是你似乎在尋找。