Maison  >  Article  >  développement back-end  >  Comment le CRTP peut-il être utilisé pour réaliser un polymorphisme statique en C ?

Comment le CRTP peut-il être utilisé pour réaliser un polymorphisme statique en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-10-28 20:33:30124parcourir

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

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn