I have the below templates:
One is used for unsigned and the other for signed. Is there any elegant way to get rid of the compiler warning without suppressing it?
warning: comparison between signed and unsigned integer expressions
Would I need to write the function for each type, e.g. uint8, uint16 etc..?
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"));
}
}
Aucun commentaire:
Enregistrer un commentaire