Maison > développement back-end > C++ > le corps du texte

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

Patricia Arquette
Libérer: 2024-10-28 20:33:30
original
205 Les gens l'ont consulté

  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>
Copier après la connexion

2. Câblage au moment de la compilation :

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

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal