我發現它在某些時候進行以下檢查一些模板代碼:在模板方法消除警告由於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