J'ai une fonction de modèle qui fonctionne sur une variable de type modèle, et si la valeur est inférieure à 0, la met à 0. Cela fonctionne bien, mais quand mon type de modèle est non signé, je reçois un avertissement sur la façon dont la comparaison est toujours fausse. Cela a évidemment du sens, mais depuis son modèle, je voudrais qu'il soit générique pour tous les types de données (signés et non signés) et ne pas émettre l'avertissement. J'utilise g ++ sous Linux, et j'imagine qu'il existe un moyen de supprimer cet avertissement particulier via l'option de ligne de commande vers g ++, mais je voudrais quand même obtenir l'avertissement dans d'autres cas, non modélisés. . Je me demande s'il y a un moyen, dans le code, d'empêcher cela, sans avoir à écrire plusieurs versions de la fonction?La comparaison est toujours fausse en raison de la portée limitée ... avec des modèles
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: Eh bien, oui, c'est une solution pour ce cas particulier :) –