Heim > Backend-Entwicklung > C++ > Wie kann CRTP verwendet werden, um statischen Polymorphismus in C zu erreichen?

Wie kann CRTP verwendet werden, um statischen Polymorphismus in C zu erreichen?

Patricia Arquette
Freigeben: 2024-10-28 20:33:30
Original
229 Leute haben es durchsucht

  How Can CRTP Be Used to Achieve Static Polymorphism in C  ?

Statischer Polymorphismus über CRTP

Um den mit virtuellen Memberfunktionen verbundenen Leistungsaufwand zu eliminieren, bietet C das CRTP (Curious Recurring Template Pattern) an. Diese Technik erleichtert die Erstellung einer statisch definierten Schnittstelle für eine Hierarchie von Typen und ermöglicht den Versand zur Kompilierungszeit.

Alternative Implementierungen

CRTP kann auf zwei verschiedene Arten genutzt werden :

1. Statische Schnittstellenspezifikation:

<code class="cpp">template <class Derived>
struct base {
  void foo() {
    static_cast<Derived *>(this)->foo();
  };
};</code>
Nach dem Login kopieren

2. Verkabelung zur Kompilierungszeit:

<code class="cpp">template <class T>
void bar(base<T> &obj) {
  obj.foo(); // static dispatch
}</code>
Nach dem Login kopieren

Beispielverwendung:

Mit diesen Ansätzen können Sie eine statisch verteilte Schnittstelle mit Typableitung zur Kompilierungszeit erstellen:

<code class="cpp">struct not_derived_from_base { };

my_type my_instance;
not_derived_from_base invalid_instance;
bar(my_instance); // calls my_instance.foo()
bar(invalid_instance); // compile error (incorrect overload deduction)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann CRTP verwendet werden, um statischen Polymorphismus in C zu erreichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage