删除模板参数的g ++警告

时间:2011-01-07 22:19:12

标签: c++ templates g++

我有一个简单的课程:

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 ++中禁用此警告。隐藏此警告或写入此方法的正确方法是什么,如果N == 0,它总是返回true?

谢谢!

2 个答案:

答案 0 :(得分:7)

所以,我想出了以下解决方案:

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 :(得分:1)

您可以为N = 0专门设置int。