Operator Lebih Muatan<< untuk Mengendalikan std::endl
Apabila melebihkan operator sisipan strim (operator<<), isu biasa timbul apabila cuba memasukkan std::endl sebagai hujah sisipan. Ralat "ralat C2678: binari '<<' : no operator found" menunjukkan ketidakupayaan sistem untuk mencari operator yang serasi untuk operan kiri, UIStream.
Sebab asas ralat ini ialah std::endl bukan jenis, tetapi fungsi. Untuk mengatasinya, kita mesti memahami cara std::cout mengendalikan std::endl. std::cout melaksanakan operator<< untuk mengambil penunjuk fungsi dengan tandatangan yang sama seperti std::endl. Ia kemudian memanggil fungsi dan memajukan nilai pulangan.
Untuk meniru tingkah laku ini, kami mentakrifkan operator tambahan<< fungsi dalam kelas MyStream kami yang mengambil fungsi dengan tandatangan MyStreamManipulator tersuai. Fungsi ini memanggil fungsi yang ditentukan dan mengembalikan nilai pulangannya.
Untuk mengendalikan std::endl secara khusus, kami mentakrifkan fungsi MyStream::endl statik yang sepadan dengan tandatangan MyStreamManipulator. Dalam fungsi ini, kami mencetak baris baharu dan melakukan sebarang operasi strim tambahan, seperti mengepam penimbal.
Selain itu, kami mentakrifkan operator<< fungsi untuk menerima tandatangan fungsi StandardEndLine yang digunakan oleh std::cout. Fungsi ini memanggil fungsi manip dengan std::cout sebagai hujahnya, membenarkan pemasukan std::endl.
Dengan mengikuti langkah-langkah ini, kami boleh membebankan operator<< dalam kelas MyStream tersuai kami untuk mengendalikan kedua-dua data yang ditentukan pengguna dan sisipan std::endl. Ini membolehkan kami menggunakan MyStream sebagai alternatif serba boleh kepada std::cout dengan kawalan penuh ke atas manipulasi strim.
Atas ialah kandungan terperinci Bagaimana untuk membebankan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!