我发现它在某些时候进行以下检查一些模板代码:在模板方法消除警告由于unsignedness
template<class IntegralType>
void randomFunction(IntegralType t)
{
...
if (t < 0)
...
}
代码的想法是,t
是一个整体式的(无论是有符号或无符号)。代码工作得很好,无论签名如何,但编译器发出警告,因为在unsigned
整数的情况下,检查将始终为真。
是否有方法C++ 03修改代码以摆脱警告而不是压制它?不知何故,我正在考虑检查T
的签名,不知道它是可能的。
我知道C++ 11的is_signed
,但我不确定它如何在C++ 03中实现。
对于'unsigned IntegralType',您总是可以使用* specialization *,它不会进行比较并为其他常用代码调用一个或多个函数。 –
@Someprogrammerdude看起来如何? 'template void randomFunction(unsigned IntegralType)''将'unsigned'解释为'unsigned int'并且抱怨。 –
user2891462
可能重复的[比较始终是错误的,因为范围有限...使用模板](https://stackoverflow.com/questions/2056996/comparison-is-always-false-due-to-limited-range-with-模板) – jww