Pengendalian Anggun Pendua, Const dan Bukan Const Getters
Sebagai pengaturcara, kami sering menghadapi isu mempunyai kedua-dua const dan non -const versi kaedah getter dalam kelas kami. Walaupun melaksanakannya secara berasingan boleh membawa kepada pertindihan kod, mencari penyelesaian yang elegan untuk teka-teki ini boleh menjadi mencabar.
Cabaran
Dalam contoh yang disediakan, kelas Foobar memerlukan dua kaedah getSomething(): satu bukan const (Something& getSomething(int index)) dan satu const (const Something& getSomething(int index) const). Walau bagaimanapun, cuba untuk melaksanakan kaedah ini dengan yang lain tidak dapat dielakkan menyebabkan ralat pengkompil. Menghantar versi bukan const daripada versi const juga merupakan satu kejahatan yang perlu.
Penyelesaian Elegan
Walaupun penyelesaian yang benar-benar murni mungkin tidak boleh dilaksanakan, yang paling biasa pendekatan yang disyorkan adalah membuang const daripada fungsi lain. Walaupun tidak betul-betul menyenangkan dari segi estetika, ini adalah teknik yang selamat kerana fungsi ahli memanggil adalah bukan const, yang bermaksud objek itu sendiri bukan const dan membuang const dibenarkan.
Pertimbangkan coretan kod berikut sebagai contoh:
class Foo { public: const int& get() const { // non-trivial work return foo; } int& get() { return const_cast<int&>(const_cast<const Foo*>(this)->get()); } };
Dalam contoh ini, versi bukan const get() membuang const daripada const versi, membenarkannya mengubah suai objek itu sendiri.
Atas ialah kandungan terperinci Bagaimanakah Kami Boleh Mengendalikan Kaedah Pendua Const dan Non-Const Getter dengan Anggun?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!