Maison > Article > développement back-end > Comment déterminer la spécialisation des modèles en C ?
En C, il est souvent nécessaire de vérifier si un type donné est une spécialisation d'un modèle de classe particulier. Prenons l'exemple ci-dessous :
template <class T> struct A {};
Comment pouvons-nous déterminer si CompareT est un A<*> pour certains, tapez * dans le code suivant ?
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*>, CompareT >::value; // A<*> ???? } int main(){ compare< A<int> >(); }
Par exemple, ici A
Solution :
Pour y parvenir, nous pouvons utiliser une métafonction personnalisée appelée is_specialization :
template <class T, template <class...> class Template> struct is_specialization : std::false_type {}; template <template <class...> class Template, class... Args> struct is_specialization<Template<Args...>, Template> : std::true_type {};
Cette métafonction renvoie vrai si T est une spécialisation de Template et false sinon. Pour illustrer son utilisation :
static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
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!