Polymorphisme statique via CRTP
Pour éliminer la surcharge de performances associée aux fonctions de membre virtuel, C propose le CRTP (Curiously Recurring Template Pattern). Cette technique facilite la création d'une interface définie statiquement pour une hiérarchie de types, permettant la répartition au moment de la compilation.
Implémentations alternatives
CRTP peut être exploité de deux manières distinctes :
1. Spécification de l'interface statique :
<code class="cpp">template <class Derived> struct base { void foo() { static_cast<Derived *>(this)->foo(); }; };</code>
2. Câblage au moment de la compilation :
<code class="cpp">template <class T> void bar(base<T> &obj) { obj.foo(); // static dispatch }</code>
Exemple d'utilisation :
En utilisant ces approches, vous pouvez créer une interface distribuée statiquement avec déduction de type au moment de la compilation :
<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>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!