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; };
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&) { return 42; } }; std::cout << has_serialize<Y, int(const std::string&)>::value; // prints 1
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!