Question :
Dans un scénario où une fonction, appelons-le printHex, modifie l'état de std::cout (par exemple, base, largeur de champ, etc.), comment restaurer l'état d'origine après l'invocation de la fonction ? Ce problème survient lorsque la sortie ultérieure utilisant std::cout est corrompue par les changements d'état effectués dans printHex.
Réponse :
Pour reprendre le contrôle de std::cout et rétablissez-le à ses paramètres d'origine, nous pouvons utiliser les capacités du
Alternativement, nous pouvons implémenter le processus de restauration à l'aide de l'acquisition de ressources est l'initialisation. (RAII) pour gérer automatiquement les drapeaux. Voici un exemple :
class RestoreCoutFlags { public: RestoreCoutFlags(std::ostream& stream) : _savedFlags(stream.flags()) {} ~RestoreCoutFlags() { stream.flags(_savedFlags); } operator std::streambuf*() const { return stream.rdbuf(); } private: std::ios_base::fmtflags _savedFlags; };
Avec cette classe, la restauration peut être réalisée de la manière suivante :
{ RestoreCoutFlags r(std::cout); // Code that modifies std::cout flags } // When the block exits, r is automatically destroyed, restoring the flags.
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!