2014-11-19 4 views
2

Предположим, я хочу написать функцию абсолютного значения для каждого типа. Что-то вроде:C++ как определить неподписанные типы?

template <class T> 
T MyAbsVersion(T num) 
{ 
    return (num > 0) ? num : num*-1; 
} 

Однако, я хотел бы отказаться номера типа без знака. Любой хороший способ сделать это?

Благодаря

+3

[ 'станд :: is_unsigned'] (http://en.cppreference.com/w/CPP/типы/is_unsigned). Вы можете использовать это с помощью 'std :: enable_if'. – juanchopanza

ответ

7

Использование std::is_signed принимать номера только signed типа

template<class T , 
      typename std::enable_if< std::is_signed<T>::value >::type* = nullptr > 
T myabs(T num) 
{ 
    return (num > 0) ? num : num*-1; 
} 

Demo Here

+1

Это должно * allow * unsigned values, no? –

+0

@BartekBanachewicz да, обновлено, спасибо – P0W

+0

Как получилось, что код в примере не компилируется, а ваша демо? –

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