我有以下模板:優雅的方式擺脫有符號和無符號整數表達式之間的比較
一個用於未簽名和另一個用於簽名。有沒有優雅的方式擺脫編譯器警告而不壓制它?
warning: comparison between signed and unsigned integer expressions
我是否需要爲每種類型編寫函數,例如: uint8,uint16等。?
template<typename X,typename Y,typename Z, typename std::enable_if<std::is_unsigned<X>::value, bool>::type = true >
void debugValidateParameter(X aValueToCheck, Y aLowerLimit, Z aUpperLimit)
{
if((aValueToCheck > aUpperLimit) || (aValueToCheck < aLowerLimit))
{
log("ERROR: ValidateParameters, aValueToCheck = % , aLowerLimit= % , aUpperLimit= % \n", aValueToCheck, aLowerLimit, aUpperLimit);
throw(std::out_of_range("Invalid Range"));
}
}
template<typename X,typename Y,typename Z, typename std::enable_if<std::is_signed<X>::value, bool>::type = true >
void debugValidateParameter(X aValueToCheck, Y aLowerLimit, Z aUpperLimit)
{
if((aValueToCheck > aUpperLimit) || (aValueToCheck < aLowerLimit))
{
log("ERROR: ValidateParameters, aValueToCheck = % , aLowerLimit= % , aUpperLimit= % \n", aValueToCheck, aLowerLimit, aUpperLimit);
throw(std::out_of_range("Invalid Range"));
}
}
爲什麼你有X,Y和Z?不應該所有的值都是* one *類型嗎? – JimmyB
比較簽名與無簽名是蘋果比較桔子。 –