Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Corak Templat Berulang Aneh (CRTP) Mencapai Polimorfisme Statik dalam C ?
Mengelakkan Polimorfisme Masa Jalan dengan CRTP
Dalam C , penggunaan fungsi ahli maya memperkenalkan overhed tambahan semasa masa jalan. CRTP (Curiously Recurring Template Pattern) mempersembahkan pendekatan alternatif untuk mengelakkan overhed ini sambil mengekalkan polimorfisme.
Terdapat dua kaedah untuk menggunakan CRTP untuk mencapai matlamat ini.
Pengkhususan Jenis Statik
Kaedah pertama melibatkan penentuan antara muka secara statik untuk struktur jenis. Ini dicapai dengan mencipta kelas templat asas dengan fungsi ahli maya. Kelas terbitan kemudiannya boleh membuat contoh kelas templat ini dan melaksanakan fungsi ahli maya:
<code class="cpp">template <class Derived> struct Base { virtual void foo() {} }; struct MyType : Base<MyType> { void foo() override; }; struct YourType : Base<YourType> { void foo() override; };</code>
Penghantaran Statik melalui Potongan Jenis Masa Kompilasi
Kaedah kedua mengelakkan penggunaan simpulan bahasa rujukan-ke-dasar atau penuding-ke-dasar. Sebaliknya, pendawaian diwujudkan pada masa penyusunan melalui fungsi templat yang menyimpulkan jenis pada masa jalan:
<code class="cpp">template <class T> void bar(Base<T>& obj) { obj.foo(); }</code>
Menggunakan kaedah ini, hanya kelas terbitan dari Base boleh dihantar ke bar. Ini membolehkan penghantaran statik dan menghapuskan overhed yang berkaitan dengan fungsi ahli maya:
<code class="cpp">bar(MyType()); // Calls MyType::foo() bar(YourType()); // Calls YourType::foo()</code>
Kesimpulannya, CRTP menawarkan mekanisme berkuasa untuk mencapai polimorfisme statik dalam C . Dengan sama ada mengkhususkan antara muka untuk struktur jenis atau melakukan penghantaran statik melalui potongan jenis masa kompilasi, pembangun boleh mengelakkan overhed masa jalan bagi fungsi ahli maya sambil mengekalkan fleksibiliti polimorfisme.
Atas ialah kandungan terperinci Bagaimanakah Corak Templat Berulang Aneh (CRTP) Mencapai Polimorfisme Statik dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!