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).
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.
La fonction check surcharge deux fonctions :
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&.
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!