ФлеймФорумПрограммирование

Как избежать разрыва шаблона?

Страницы: 1 2 Следующая »
#0
17:42, 23 авг 2011

Название - для привлечения внимания, теперь по существу :)

Есть код:

template <typename T>
void foo(T value)
{
 if (value < 0)
 {
   ...
 } 
 else
 {
   ...
 }
}

...

{
 foo<int>(100500); // при инстанцировании - все ок
 foo<unsigned int>(100500); // при инстанцировании - предупрежедние о том, что сравнение `< 0` для беззнаковых типов всегда равно false
}

Как убрать это предупреждение, не специализируя явно шаблон?

Правка: не холивар

#1
17:46, 23 авг 2011

msdn #pragma warning disable
ps. для msvc

#2
17:46, 23 авг 2011

О да :)

#3
17:47, 23 авг 2011

Я имел ввиду логический уровень - как переписать код, а не выключить предупрежедение.

#4
18:00, 23 авг 2011

Sergio

template <typename T>
void foo(T value)
{
    if (value >= 0)
    {
        ...
    } 
    else
    {
        ...
    }
}
#5
18:04, 23 авг 2011

Хм.... по-моему, это крутое решение :)

Правка: которое выдает предупреждение warning: comparison of unsigned expression >= 0 is always true [-Wtautological-compare,2]

#6
18:12, 23 авг 2011

Sergio
Возможно как-то разделить 0 и больше нуля?
if(value && value > 0)

не проверял :)

#7
18:13, 23 авг 2011

Sergio

Изображение
#8
18:17, 23 авг 2011

Может так ( намного длиннее, зато гибкий  ;-)  )

class tInt
{
public:
   bool cond ()
   {
       if (i < 0)
          return false;
       return true;
   }
private:
   int i;
}

class tUInt
{
public:
   bool cond ()
   {
          return true;
   }
private:
   unsigned int i;
}

void foo(T value)
{
 if ( value.cond() )
 {
   ...
 } 
 else
 {
   ...
 }
}
#9
18:33, 23 авг 2011

L1f
> if(value && value > 0)
Да, это решает!

#10
18:40, 23 авг 2011

vap
int от -2^31 до 2^31
unsigned int от 0 до 2^32
следовательно, при числах unsigned int , больше 2^31 будет такая же реакция, как и на отрицательное число

#11
18:43, 23 авг 2011

А черт, не заметил что оно на проверку больше нуля тоже варнинг кидает.

#12
18:43, 23 авг 2011

А зачем?

#13
18:44, 23 авг 2011

> if(value && value > 0)
но тогда это (0; +inf)

#14
18:46, 23 авг 2011

http://www.gamedev.ru/industry/forum/?id=151170&page=5#m62

про это чтоли ? :)

Страницы: 1 2 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.