Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Kami Boleh Mengendalikan Kaedah Pendua Const dan Non-Const Getter dengan Anggun?

Bagaimanakah Kami Boleh Mengendalikan Kaedah Pendua Const dan Non-Const Getter dengan Anggun?

Susan Sarandon
Susan Sarandonasal
2024-12-04 00:39:09629semak imbas

How Can We Gracefully Handle Duplicate Const and Non-Const Getter Methods?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn