Comprendre l'implémentation du trait is_base_of
Le trait is_base_of nous permet de déterminer si un type est une classe de base d'un autre. L'implémentation utilise une technique complexe impliquant une métaprogrammation de modèles et des conversions définies par l'utilisateur.
Reconnaître l'héritage
Lorsqu'un type B est une classe de base de D, la is_base_of le trait renvoie vrai. Ceci est réalisé en définissant deux fonctions de vérification :
La valeur constante est ensuite définie en fonction de la taille du résultat de la vérification d'appel sur un hôte exemple. Si la taille est la même que sizeof(yes), cela signifie que B est une base de D.
Le rôle du modificateur const
L'opérateur B*( ) et les fonctions membres de l'opérateur D*() dans la structure Host sont déclarées comme const. Cela garantit que la conversion depuis Host vers B* est sélectionné lors de la conversion en D*. Cette distinction est cruciale pour reconnaître l'héritage privé, car le compilateur ne peut pas convertir de D* en B* lorsque B est privé.
Template Metaprogramming
Le modèle de fonction de vérification de modèle
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!