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

Comment fonctionne cette implémentation C `is_base_of` utilisant CRTP ?

DDD
Libérer: 2024-11-22 05:40:15
original
148 Les gens l'ont consulté

How Does This C   `is_base_of` Implementation Using CRTP Work?

Comment fonctionne cette implémentation du trait is_base_of ?

L'extrait de code que vous avez fourni implémente le trait is_base_of en C , qui vérifie si une classe hérite d'une autre. Il utilise une technique appelée "Curiously Recurring Template Pattern" (CRTP).

Comment ça marche

Host est une classe modèle qui encapsule la classe dérivée et fournit un moyen d'accéder à son opérateur B* fonction. Lorsque nous voulons vérifier si B est la classe de base de D, nous appelons is_base_of::value.

  1. La fonction check surcharge deux fonctions :

    • vérification statique oui (D*, T)
    • vérification statique non (B*, int)
  2. Hôte peut être converti à la fois en D* et en B* grâce à des séquences de conversion définies par l'utilisateur.
  3. Si B est la base de D, la première fonction de vérification est appelée avec Host converti en D* et un T arbitraire. La fonction de vérification renvoie un oui si la conversion réussit (c'est-à-dire que D hérite de B).
  4. Si B n'est pas la base de D, la deuxième fonction de vérification est appelée avec hôte converti en B* et la valeur de int spécifiée. La fonction de vérification renvoie un non si la conversion en B* réussit (c'est-à-dire que B et D ne sont pas liés).
  5. is_base_of::value est définie sur true si la fonction de vérification renvoie un oui et faux sinon.

Importance du mot clé const dans l'opérateur B*

L'opérateur B* doit être const car sinon, cela serait ambigu lors de la sélection de la fonction de vérification à appeler. Avec le mot-clé const, le compilateur sait utiliser la fonction de vérification qui prend B* const&.

Pourquoi la première fonction de vérification est-elle meilleure ?

La première fonction de vérification est meilleure car elle utilise un utilisateur -séquence de conversion définie qui convertit de D* en B*. Ceci est plus spécifique que la deuxième fonction de vérification, qui utilise une séquence de conversion définie par l'utilisateur qui convertit de B* en int.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal