Une classe est-elle une spécialisation de modèle ?
En C , il peut être utile de déterminer si un type donné est une spécialisation d'un particulier modèle de classe. Par exemple, considérons le code suivant :
template<class T> struct A {}; template<class CompareT> void compare() { // is this A? cout << is_same< A<*> , CompareT >::value << endl; // A<?> ???? }
Étant donné le code ci-dessus, comment pouvons-nous vérifier si CompareT est un A<> pour certains types *?
Solution :
En utilisant la métafonction de modèle is_specialization, vous pouvez vérifier si un type est une spécialisation d'un modèle de classe. Voici un exemple :
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 {}; static_assert(is_specialization<std::vector<int>, std::vector>{}, ""); static_assert(!is_specialization<std::vector<int>, std::list>{}, "");
Dans l'exemple ci-dessus, is_specialization prend deux arguments : T et Template. Si T est une spécialisation de Template, is_specialization
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!