Ho una funzione basata su modello che opera su una variabile di tipo template e se il valore è minore di 0, lo imposta su 0. Funziona bene, ma quando il mio modello di tipo non è firmato, ricevo un avviso su come il confronto è sempre falso. Questo ovviamente ha senso, ma dal momento che il suo modello, mi piacerebbe che fosse generico per tutti i tipi di dati (firmati e non firmati) e non emettere l'avviso.Il confronto è sempre falso a causa della portata limitata ... con i modelli
Sto usando g ++ su Linux, e sto indovinando che c'è un modo per sopprimere quel particolare avvertimento tramite l'opzione da linea di comando a g ++, ma mi piacerebbe comunque ricevere l'avviso in altri casi, senza modelli . Mi chiedo se c'è del modo, nel codice, per evitare ciò, senza dover scrivere più versioni della funzione?
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: Beh, sì, questa è una soluzione per questo caso particolare :) –