Operator terlebih muatan<< dengan Pengendalian endl Tersuai
Apabila membebankan operator<< operator, adalah mungkin untuk menghadapi ralat kompilasi apabila cuba menggunakan std::endl. Ralat ini berlaku kerana pengkompil tidak dapat mencari pengendali yang sesuai<< pelaksanaan untuk mengendalikan jenis std::endl.
Untuk menyelesaikan masalah ini, anda perlu memahami bahawa std::endl bukan objek, sebaliknya fungsi. Untuk menampung ini, std::cout mempunyai operator sendiri<< beban berlebihan yang secara khusus mengambil penunjuk fungsi dengan tandatangan yang sama seperti std::endl. Apabila dipanggil, beban lampau ini memanggil fungsi dan menyebarkan nilai pulangan.
Untuk mendayakan strim tersuai mengendalikan std::endl, pendekatan yang serupa diperlukan. Berikut ialah contoh kod yang menunjukkan perkara ini:
#includestruct MyStream { template MyStream& operator<<(const T& x) { std::cout << x; return *this; } // Function that takes a custom stream and returns it typedef MyStream& (*MyStreamManipulator)(MyStream&); // Overload to accept functions with custom signature MyStream& operator<<(MyStreamManipulator manip) { return manip(*this); } // Custom `endl` implementation for this stream static MyStream& endl(MyStream& stream) { std::cout << std::endl; stream << "Called MyStream::endl!" << std::endl; return stream; } // Type of std::cout typedef std::basic_ostream > CoutType; // Function signature of std::endl typedef CoutType& (*StandardEndLine)(CoutType&); // Overload to accept std::endl MyStream& operator<<(StandardEndLine manip) { manip(std::cout); return *this; } }; int main() { MyStream stream; stream << 10 << " faces." << MyStream::endl << std::endl; return 0; } Dalam kod ini, kami mempunyai:
- Operator terlampau beban<< untuk MyStream mengendalikan jenis dan fungsi generik dengan tandatangan tersuai.
- Mentakrifkan fungsi endl tersuai yang mencetak baris baharu dan maklumat tambahan.
- Operator terlampau beban<< untuk MyStream menerima penuding fungsi std::endl sebagai hujah.
Pendekatan ini membenarkan strim tersuai, seperti MyStream dalam contoh, menyokong std::endl dan menyediakan gelagat tersuai apabila menggunakannya.
Atas ialah kandungan terperinci Cara Mengendalikan `std::endl` Apabila Melebihi `. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!