Dans ce contexte de programmation, nous visons à écrire directement des données dans un tampon existant à l'aide du standard I /O flux. Explorons comment y parvenir avec la méthode pubsetbuf().
La méthode pubsetbuf() dans streambuf, qui est la classe de base pour les tampons de flux dans la bibliothèque standard C , nous permet de fournir un tampon alloué en externe au flux. Cependant, dans l'implémentation Microsoft Visual Studio 2008 de la bibliothèque standard, cette méthode n'effectue aucune affectation de tampon.
Pour contourner ce problème, nous pouvons créer une implémentation streambuf personnalisée qui initialise ses pointeurs internes pour pointer vers le tampon donné. Voici un modèle de streambuf qui accomplit cela :
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { // Initialize internal buffer pointers to the provided buffer setp(buffer, buffer + bufferLength); } };
En utilisant notre streambuf personnalisé, nous pouvons maintenant modifier notre code pour écrire directement dans le tampon externe :
void FillBuffer(char* buffer, unsigned int size) { ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl; }
Cette approche écrit efficacement les données dans le tampon donné sans copie intermédiaire, comme vous le souhaitez.
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!