Tengo una función de plantilla que opera en una variable de tipo plantilla, y si el valor es menor que 0, lo pone a 0. Esto funciona bien, pero cuando mi tipo de plantilla no tiene firma, recibo una advertencia sobre cómo la comparación siempre es falsa. Obviamente, esto tiene sentido, pero desde su diseño, me gustaría que fuera genérico para todos los tipos de datos (firmados y sin firmar) y no emitir la advertencia.La comparación es siempre falsa debido al rango limitado ... con plantillas
Estoy usando g ++ en Linux, y supongo que hay una manera de suprimir esa advertencia en particular a través de la opción de línea de comando a g ++, pero aún me gustaría recibir la advertencia en otros casos sin plantilla . Me pregunto si hay alguna manera, en el código, de evitar esto, sin tener que escribir múltiples versiones de la función.
template < class T >
T trim(T &val)
{
if (val < 0)
{
val = 0;
}
return (val);
}
int main()
{
char cval = 5;
unsigned char ucval = 5;
cout << "Untrimmed: " << (int)cval;
cval = trim(cval);
cout << " Trimmed: " << (int)cval << endl;
cout << "Untrimmed: " << (int)ucval;
cval = trim(ucval);
cout << " Trimmed: " << (int)ucval << endl;
return (0);
}
+1: Bueno, sí, esa es una solución para este caso particular :) –