Bonjour,
J'ai surchargé, dans une de mes classes, l'opérateur <<, afin d'ajouter plus facilement des paramètres de divers types (une classe préparant une requête SQL, et convertissant au passage, selon leur type, les paramètres fournis, pour qu'ils soient au format attendu).
Par exemple, une chaîne devrait être simplement concaténée, une date sera convertie en une chaîne d'un format acceptable pour la base, puis concaténée, un booléen devrait être traduit en FALSE ou TRUE, un tableau binaire pourra être "escapé" avant d'être ajouté, etc.
La plupart de ces opérateurs fonctionnent très bien, et me donnent les résultats escomptés. Cependant, T& T::operator<<(bool b) ne marche pas. En effet, bien que l'opérateur soit présent, il semblerait que le compilateur préfère faire une conversion implicite de mon booléen en int, puis passer par mon T& T::operator<<(int i). J'ai donc des affichages, dans ma requete, de "0" au lieu de "FALSE", par exemple, ce qui est assez gênant.
Quelqu'un aurait-il une idée de ce qui pourrait causer ce comportement ? Y'a-t'il un moyen de désactiver les conversions explicites, au moins dans ce contexte ? Ou, sinon, y'a-t'il moyen de le forcer à utiliser cette forme de la méthode, plutôt qu'une autre, de manière "simple" ?
Parce que le but est tout de même d'écrire T << mon_bool, pas T.operator<<(mon_bool)
Merci par avance
Partager