Maison >développement back-end >C++ >Comment surcharger le
Opérateur de surcharge<< pour gérer std::endl
Lors de la surcharge de l'opérateur d'insertion de flux (operator<<), un problème courant survient lorsque vous essayez d'inclure std::endl comme argument d'insertion. L'erreur "erreur C2678 : binaire '<<' : aucun opérateur trouvé" indique l'incapacité du système à trouver un opérateur compatible pour l'opérande de gauche, UIStream.
La raison sous-jacente de cette erreur est que std::endl n'est pas un type, mais une fonction. Pour surmonter cela, nous devons comprendre comment std :: cout gère std :: endl. std::cout implémente l'opérateur<< pour prendre un pointeur de fonction avec la même signature que std::endl. Il appelle ensuite la fonction et transmet la valeur de retour.
Pour émuler ce comportement, nous définissons un opérateur supplémentaire<< fonction dans notre classe MyStream qui prend une fonction avec la signature MyStreamManipulator personnalisée. Cette fonction appelle la fonction spécifiée et renvoie sa valeur de retour.
Pour gérer spécifiquement std::endl, nous définissons une fonction statique MyStream::endl qui correspond à la signature MyStreamManipulator. Dans cette fonction, nous imprimons une nouvelle ligne et effectuons toutes les opérations de flux supplémentaires, telles que le vidage du tampon.
De plus, nous définissons un opérateur<< fonction pour accepter la signature de fonction StandardEndLine utilisée par std::cout. Cette fonction appelle la fonction manip avec std::cout comme argument, permettant l'insertion de std::endl.
En suivant ces étapes, nous pouvons surcharger l'opérateur<< dans notre classe MyStream personnalisée pour gérer à la fois les données définies par l'utilisateur et l'insertion de std::endl. Cela nous permet d'utiliser MyStream comme alternative polyvalente à std::cout avec un contrôle total sur la manipulation du flux.
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!