我有以下模板:优雅的方式摆脱有符号和无符号整数表达式之间的比较
一个用于未签名和另一个用于签名。有没有优雅的方式摆脱编译器警告而不压制它?
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
比较签名与无签名是苹果比较桔子。 –