Polymorfisme Statik dengan CRTP
Dalam C , fungsi ahli maya menyediakan mekanisme untuk melaksanakan polimorfisme. Walau bagaimanapun, ia datang dengan overhed kerana pengikatan dinamik. Artikel ini meneroka penggunaan Corak Templat Berulang Aneh (CRTP) sebagai alternatif untuk mengelakkan overhed ini.
Pendekatan CRTP
Untuk melaksanakan polimorfisme statik menggunakan CRTP, dua teknik boleh digunakan:
Definisi Antara Muka Statik
Pendekatan pertama melibatkan penentuan statik antara muka untuk struktur jenis. Dengan menggunakan CRTP, templat kelas asas menentukan antara muka, dan kelas terbitan mesti melaksanakan fungsi ahli yang diperlukan. Kelas asas menggunakan cast statik untuk menggunakan fungsi yang sesuai dalam kelas terbitan, menghapuskan keperluan untuk fungsi maya.
Potongan Jenis Masa Kompilasi
Teknik kedua mengeluarkan dengan simpulan bahasa penunjuk ke pangkalan atau rujukan kepada asas dan melakukan pendawaian pada masa penyusunan. Templat kelas asas ditakrifkan dan fungsi templat digunakan untuk melaksanakan penghantaran statik berdasarkan jenis parameter kelas asas yang disimpulkan.
Faedah
CRTP dengan polimorfisme statik menawarkan beberapa faedah:
Contoh
Berikut ialah contoh ringkas yang menunjukkan pendekatan pertama menggunakan CRTP:
<code class="cpp">template <class Derived> struct Base { void foo() { static_cast<Derived *>(this)->foo(); } }; struct MyType : Base<MyType> { void foo() { // Implementation } };</code>
Contoh ini mengelakkan penggunaan fungsi maya dan melaksanakan penghantaran statik berdasarkan jenis kelas terbitan.
Atas ialah kandungan terperinci Bolehkah CRTP Menggantikan Fungsi Maya untuk Polimorfisme Statik dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!