Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Corak Templat Berulang Aneh (CRTP) Mencapai Polimorfisme Statik dalam C ?

Bagaimanakah Corak Templat Berulang Aneh (CRTP) Mencapai Polimorfisme Statik dalam C ?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 05:48:02848semak imbas

How Does Curiously Recurring Template Pattern (CRTP) Achieve Static Polymorphism in 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!

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