Maison >développement back-end >C++ >Comment puis-je surcharger le
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& endl(MyStream& 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!