Maison >développement back-end >C++ >Comment puis-je surcharger le

Comment puis-je surcharger le

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-14 02:01:10258parcourir

How Can I Overload the

Opérateur prioritaire<< pour une manipulation améliorée des flux

Cette discussion est centrée sur le défi de la surcharge de l'opérateur<< et incorporant la fonctionnalité de std::endl.

Le problème :

Lors de la surcharge de l'opérateur<<, alors que les iostreams tels que my_stream peuvent facilement générer des types et des chaînes primitifs via mon_stream << 10 ≪≪ " heads", en essayant de générer std::endl en utilisant my_stream << fin; entraîne une erreur de compilation.

La solution : comprendre les pointeurs de fonction

La clé pour résoudre ce problème réside dans la reconnaissance que std::endl est une fonction. Le flux std::cout utilise l'opérateur<< pour accepter un pointeur de fonction avec la même signature que std::endl. Cette fonction est ensuite invoquée et sa valeur de retour est transmise.

Personnalisation de la manipulation de fin de ligne pour MyStream

Pour obtenir une fonctionnalité similaire pour my_stream, une fonction endl spécialisée peut être définie avec la signature suivante :

typedef MyStream&amp; endl(MyStream&amp; stream)

Au sein de cette fonction, vous pouvez effectuer toutes les actions ou modifications supplémentaires requises pour la mise en œuvre de votre flux spécifique, s'assurant qu'il se comporte comme prévu lorsque std::endl est utilisé.

Opérateur de surcharge<< pour accepter std::endl

Pour permettre à my_stream d'accepter std::endl également, déclarez un autre opérateur<< avec la signature suivante :

typedef std::basic_ostream > CoutType;
typedef CoutType& (*StandardEndLine)(CoutType&);

MyStream& operator<<(StandardEndLine manip)

Cet opérateur appelle std::endl sur le flux de sortie standard, imitant le comportement de std::cout, tout en étant compatible avec l'implémentation endl personnalisée de my_stream.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn