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!