Maison > développement back-end > C++ > Ma classe a-t-elle cette fonction de membre ?

Ma classe a-t-elle cette fonction de membre ?

DDD
Libérer: 2024-12-21 08:20:11
original
418 Les gens l'ont consulté

Does My Class Have This Member Function?

Vérification d'une fonction de membre de classe d'une signature donnée

Considérez le défi de vérifier si une classe possède une fonction de membre spécifique d'un prédéterminé signature. Bien qu'il soit lié au concept abordé dans Effective C Third Edition de Scott Meyers, ce problème nécessite une solution distincte.

Le problème et l'exigence

Contrairement au scénario de Meyers où assurer l'existence d'une fonction membre est cruciale pour la compilation, cette situation nécessite une approche flexible. L'objectif est de faire la distinction entre les classes qui implémentent la fonction membre souhaitée et celles qui ne le font pas, déclenchant différentes actions en conséquence.

Une solution modèle

C 11 fournit un modèle qui détecte efficacement les fonctions membres, même celles héritées. L'implémentation fournie s'appuie sur le trait is_same pour vérifier la compatibilité des types de retour :

#include <type_traits>

// Check member function presence and return type correctness
template<typename C, typename Ret, typename... Args>
struct has_serialize {
    static constexpr bool value =
        std::is_same<
            decltype( std::declval<T>().serialize( std::declval<Args>()... ) ),
            Ret
        >::type::value;
};
Copier après la connexion

Usage

Pour utiliser cette approche, spécifiez simplement la classe à vérifier, ainsi avec le type de retour et les arguments de la fonction membre :

struct X {
     int serialize(const std::string&amp;) { return 42; } 
};

std::cout << has_serialize<Y, int(const std::string&amp;)>::value; // prints 1
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal