Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah CRTP Boleh Mencapai Jenis Pulangan yang Berubah Secara Statik Menggunakan Typedefs daripada Kelas Terbitan?
Menukar Jenis Pulangan Secara Statik dalam CRTP dengan Typedefs daripada Kelas Terbitan
Konsep Corak Templat Berulang Aneh (CRTP) dalam C membolehkan statik polimorfisme, membolehkan pelaksanaan tingkah laku kelas terbitan dalam kelas asas. Walau bagaimanapun, mungkin terdapat situasi di mana seseorang ingin mengubah jenis pemulangan fungsi dalam kelas asas berdasarkan jenis terbitan.
Malangnya, pengubahsuaian ini tidak dapat dilakukan dengan serta-merta dalam sampel kod yang diberikan kerana ketidaklengkapan kelas terbitan apabila digunakan sebagai parameter templat untuk kelas asas. Untuk menangani perkara ini, kod ini menggunakan penyelesaian biasa: mencipta templat kelas ciri.
Menggunakan Kelas Ciri
Templat kelas ciri, seperti templat base_traits yang ditunjukkan dalam kod yang disemak, bertindak sebagai jambatan antara kelas asas dan turunan. Ia mentakrifkan ahli yang diperlukan, termasuk typedefs dan panggilan fungsi, yang kelas asas perlu akses daripada kelas terbitan.
Kelas Ciri Pengkhususan
Kod yang disemak mengkhususkan base_traits untuk diperolehi untuk menyediakan pelaksanaan fungsi value_type dan call_foo khusus yang diperlukan oleh asas. Pengkhususan ini memastikan bahawa asas mempunyai akses kepada jenis pulangan yang betul dan gelagat fungsi daripada kelas terbitan.
Butiran Pelaksanaan
Kelas terbitan kini mengandungi fungsi derived_foo yang mengembalikan nilai jenis value_type. Fungsi base_foo dalam asas memanggil fungsi call_foo daripada base_traits khusus untuk memanggil derived_foo dan mendapatkan nilai pulangan yang sesuai.
Dengan menggunakan templat kelas ciri dan mengkhususkannya untuk jenis terbitan yang diingini, ia menjadi mungkin untuk menukar secara dinamik kembalikan jenis dalam CRTP berdasarkan kelas terbitan.
Atas ialah kandungan terperinci Bagaimanakah CRTP Boleh Mencapai Jenis Pulangan yang Berubah Secara Statik Menggunakan Typedefs daripada Kelas Terbitan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!