g ++ 4.4.5Résolution d'opérateur surchargé C++
J'ai une classe qui étend la classe std :: ofstream pour ajouter une fonctionnalité.
MyStream& MyStream::operator<<(const bool& val) {
if(this->pos == 8) {
this->pos = 0;
ofstream::operator<<(this->curbyte); //call the parent method
}
curbyte = curbyte + (val << pos++);
return *(this);
}
qui vous permet essentiellement d'écrire des bits individuels comme bools puis il va écrire chaque série de 8 en utilisant la méthode mère < <. Je devais utiliser cette syntaxe d'appel ici parce que j'appelle la méthode de base, mais dans ma principale méthode réelle où j'utilise cette classe j'ai essayé d'appeler la ligne suivante:
bout << (unsigned char) 255u;
que je veux avoir appeler le < < méthode déjà définie pour ofstream et unsigned char mais elle me donne une longue erreur de surcharge ambiguë listant tous les candidats liés à char déjà définis pour ofstream (char, unsigned char, signed char) et ma propre méthode bool, même si j'ai explicitement cast en char. Cependant, j'ai réussi à le faire fonctionner avec les éléments suivants:
bout.operator<<((unsigned char) 255u);
Cela doit avoir quelque chose à voir avec la façon dont g ++ la coulée implicite (je suppose qu'il ya un casting plus possible après mon casting défini par l'utilisateur dans la premier cas qui le rend ambigu que la syntaxe d'appel de fonction évite). Est-ce que quelqu'un sait exactement pourquoi cela se produit ou s'il y a une meilleure syntaxe qui évite l'erreur?
Je suis surpris que 'bout.operator << ((unsigned char) 255u)' fonctionne. Pouvez-vous confirmer quelle fonction il appelle réellement? –
Est-ce que vous avez un 'using ofstream :: operator <<;' sTatEmEnt dans MyStream? (remarqué que vous aimez camelcase) ;-) –
@Charles Bailey: la différence ne peut provenir que du préfixe 'bout.' qui supprime les correspondances' :: operator << 'de la résolution. Je suppose qu'il correspond à celui ci-dessus, parce que c'est le seul exposé directement par MyStream, avec les autres ne faisant que correspondre après que MyStream est tombé dans un ofstream & for :: operator <<. –