Operator Mengatasi<< untuk Manipulasi Strim Dipertingkat
Perbincangan ini tertumpu pada cabaran operator lebih muatan<< dan menggabungkan kefungsian std::endl.
Masalahnya:
Apabila membebankan operator<<, manakala iostream seperti my_stream boleh mengeluarkan jenis dan rentetan primitif dengan mudah melalui strim_saya << 10 << " heads", cuba mengeluarkan std::endl menggunakan my_stream << endl; mengakibatkan ralat penyusunan.
Penyelesaian: Memahami Penunjuk Fungsi
Kunci untuk menyelesaikan isu ini terletak pada mengenali std::endl ialah fungsi. Aliran std::cout menggunakan operator<< untuk menerima penunjuk fungsi dengan tandatangan yang sama seperti std::endl. Fungsi ini kemudiannya digunakan dan nilai pulangannya dimajukan.
Menyesuaikan Manipulasi Talian Akhir untuk MyStream
Untuk mencapai kefungsian serupa untuk my_stream, fungsi endl khusus boleh ditakrifkan dengan tandatangan berikut:
typedef MyStream& endl(MyStream& stream)
Dalam fungsi ini, anda boleh melakukan sebarang tindakan tambahan atau pengubahsuaian yang diperlukan untuk pelaksanaan strim khusus anda, memastikan ia berkelakuan seperti yang dimaksudkan apabila std::endl digunakan.
Operator Lebih Muatan<< untuk Terima std::endl
Untuk membenarkan my_stream menerima std::endl juga, isytiharkan pengendali lain<< dengan tandatangan berikut:
typedef std::basic_ostream> CoutType; typedef CoutType& (*StandardEndLine)(CoutType&); MyStream& operator<<(StandardEndLine manip) Pengendali ini memanggil std::endl pada aliran keluaran standard, meniru gelagat std::cout, sambil serasi dengan pelaksanaan endl tersuai my_stream.
Atas ialah kandungan terperinci Bagaimana Saya Boleh Membebankan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!