Menetapkan Penampan Dalaman untuk Strim Standard Menggunakan pubsetbuf
Masalah:
Dalam percubaan untuk tulis data ke penimbal sedia ada menggunakan aliran rentetan, pengaturcara pada mulanya menggunakan salinan untuk memindahkan kandungan aliran ke penimbal, berhasrat untuk mengelakkan penyalinan data yang berlebihan. Selepas itu, mereka mencuba streambuf::pubsetbuf() untuk mencapai ini, tetapi mendapati ia tidak mengubah suai penimbal di bawah pelaksanaan perpustakaan standard Visual Studio 2008 C.
Jawapan:
Setelah siasatan lanjut, ternyata kaedah pubsetbuf dalam pelaksanaan perpustakaan yang diberikan pada dasarnya adalah tanpa operasi. Untuk mengkonfigurasi strim untuk menulis kepada penimbal tertentu, menggunakan kelas std::streambuf tersuai disyorkan:
template <typename char_type> struct ostreambuf : public std::basic_streambuf<char_type, std::char_traits<char_type>> { ostreambuf(char_type* buffer, std::streamsize bufferLength) { setp(buffer, buffer + bufferLength); } };
Penimbal strim tersuai ini memulakan bahagian dalamannya untuk merujuk penimbal yang disediakan. Untuk menggunakannya:
ostreambuf<char> ostreamBuffer(buffer, size); std::ostream messageStream(&ostreamBuffer); messageStream << "Hello" << std::endl; messageStream << "World!" << std::endl;
Pendekatan ini membenarkan penulisan terus ke penimbal luaran menggunakan perpustakaan IOStream dan std::ostream, mengelakkan penyalinan yang tidak perlu yang terlibat dalam kaedah penyalinan awal.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menulis dengan Cekap kepada Penampan Pra-Peruntukan Menggunakan C Standard Streams?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!