Heim  >  Artikel  >  Backend-Entwicklung  >  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
Patricia ArquetteOriginal
2024-10-28 20:33:30124Durchsuche

  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>

2. Verkabelung zur Kompilierungszeit:

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

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>

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!

Stellungnahme:
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