Maison  >  Article  >  développement back-end  >  SFINAE peut-il être utilisé pour détecter les fonctions membres héritées en C ?

SFINAE peut-il être utilisé pour détecter les fonctions membres héritées en C ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-05 13:37:02196parcourir

Can SFINAE Be Used to Detect Inherited Member Functions in C  ?

SFINAE pour détecter les fonctions membres de la classe de base

En C, SFINAE (Substitution Failure Is Not An Error) est couramment utilisé pour vérifier le présence d’une fonction membre spécifique dans une classe. Cependant, la détection des fonctions membres héritées à l'aide de SFINAE nécessite une approche plus complexe.

Le code fourni dans la question tente d'exploiter SFINAE à cette fin, mais ne tient pas compte de l'héritage. Pour remédier à cette limitation, la solution présentée ici utilise une stratégie différente.

Inspirée de la discussion dans un fil de discussion d'utilisateurs de Boost, la classe de modèle has_foo est définie. Il exploite un mécanisme de vérification de type pour différencier les fonctions membres directes et héritées. La fonction deduce tente de déduire un type qui correspond à la signature attendue de la fonction membre. Si la déduction réussit (c'est-à-dire que la taille du type déduit est oui), l'indicateur de résultat est défini sur true, indiquant la présence de la fonction membre héritée.

Application de cette solution aux exemples de classes, A, B, et C, les résultats démontrent que has_foo reconnaît correctement les fonctions membres héritées dans B.

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