En utilisant des opérateurs surchargés sur les pointeurs
J'ai surchargé le << exploitant d'une classe. Comment puis-je faire à la surcharge de l'opérateur si je veux l'utiliser sur les pointeurs, comme la suivante?
class A {
std::string operator<<(std::string&);
}
aInst << "This works";
aPointer << "This doesnt work";
aPointer->operator<<("Whereas this works but is useless");
J'espère que vous pourrez m'aider.
heinrich
OriginalL'auteur Erik | 2010-10-29
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de déréférencer le pointeur de la première.
Le seul autre moyen est la façon dont vous avez décrit ci-dessus
Edit: Andre solution ci-dessous est réalisable, mais comme il a dit qu'il ne peut pas être une bonne idée.
OriginalL'auteur Mike Bailey
Tout d'abord, pour coller avec les conventions standard, votre
operator<<
doit être déclaré comme ceci:Maintenant, techniquement, vous pourriez achiever partie de ce que vous voulez par la mise en œuvre de la fonction suivante mondial:
Cela permettrait à des déclarations telles que:
Toutefois, vous ne serez pas en mesure d'écrire ce qui suit:
Dans tous les cas, l'écriture d'un de ces opérateurs seraient confusion, dans le meilleur des. Vous devez vivre avec le plus simple syntaxe de
et écrire du code qui colle aux conventions établies pour permettre à d'autres (et vous-même, dans quelques semaines) pour la lecture de votre code.
OriginalL'auteur André Caron
Vous ne pouvez pas le faire. Exploitant les fonctions sont prises en considération uniquement pour des opérandes de l'énumération ou types de classe entre eux.
Vous après toutes les maj d'un pointeur, mais pas une classe. Vous avez besoin de préciser explicitement que vous souhaitez passer dans une classe de l'objet par un déréférencement du pointeur de la première.
(À noter que "les types de classes" englobe les structures et les syndicats.)
correct. les structures et les syndicats sont des classes. Exploitant les fonctions sont prises en considération lorsque les structures et les syndicats sont des opérandes d'un opérateur, comme pour les classes déclarées avec la "classe" classe-clé.
OriginalL'auteur Johannes Schaub - litb
Normalement il n'y a pas de bonne raison de le faire, qu'en raison de la sémantique de l'opérateur << return référence à un objet de flux. Et techniquement, fondamentalement, vous ne pouvez pas le faire.
operator<<
doit retourner la gauche argument.OriginalL'auteur Sheen