Удаление предупреждения g ++ для параметра шаблона - PullRequest
6 голосов
/ 08 января 2011

У меня есть простой класс:

template<size_t N, typename T>
class Int
{
    bool valid(size_t index) { return index >= N; }
    T t;
}

Если я определяю экземпляр этого класса как:

Int<0, Widget> zero;

, я получаю предупреждение g ++:

warning: comparison is always true due to limited range of data type

Я пытался сделать это, но я не мог понять, как частично специализировать функцию с нетиповым параметром шаблона.Похоже, что это может быть невозможно отключить это предупреждение в g ++.Как правильно скрыть это предупреждение или написать этот метод так, чтобы он всегда возвращал true, если N == 0?

Спасибо!

Ответы [ 2 ]

7 голосов
/ 08 января 2011

Итак, я придумал следующее решение:

template<size_t N>
bool GreaterThanOrEqual(size_t index)
{
    return index >= N;
}

template<>
bool GreaterThanOrEqual<0l>(size_t index)
{
    return true;
}

Итак, теперь класс выглядит так:

template<size_t N, typename T>
class Int
{
    bool valid(size_t index) { return GreaterThanOrEqual<N>(index); }
    T t;
}

Конечно, я получаю предупреждение о неиспользованном параметре, но есть способы обойти это ....

Разумное ли это решение?

1 голос
/ 08 января 2011

Вы можете специализировать int для N = 0.

...