2013-04-04 5 views
8

Я хочу использовать неподписанные 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); 
    } 

Это не работает, так как без знака, не расширяется до знака междунар до типа Т принимается во внимание. Есть ли обходной путь, отличный от того, как просто ввести U и написать в документации, что U должен быть неподписанным T?

+3

Как насчет [ 'станд :: make_unsigned'] (http://en.cppreference.com/w/cpp/types/make_unsigned)? –

ответ

2

вы можете использовать std::make_unsigned<T>::type

+0

за исключением того, что г ++ (tdm64-1) 4.7.1 не находит его в шаблоне недействительного signed2unsigned (сопзИте T * источник, станд :: make_unsigned :: типа * Dest, size_t п) и я - станд = C++ 11 на дают «станд :: make_unsigned :: типа» не тип – user877329

+0

использовать ЬурейиЕ зЬй :: make_unsigned :: типа T_type – 4pie0

+0

Eventhough он собирает, он на самом деле разрушает идею используя шаблон, поскольку я не могу сделать typedef как шаблон. – user877329

11

std::make_unsigned<T>::type - это то, что вы, кажется, ищете.

Смежные вопросы