Maison > Article > développement back-end > Puis-je déterminer si une classe est une spécialisation d'un modèle de classe ?
Puis-je confirmer la spécialisation des modèles de classe ?
Dans le développement de logiciels, nous devons souvent déterminer si une classe donnée est spécialisée en raison des modèles de classe. . Considérons le scénario suivant :
Problème :
Étant donné un modèle de classe comme
template <class T> struct A {};
Est-il possible de déterminer si CompareT est une instance de A<> ; pour n'importe quel type *? Par exemple, dans le code ci-dessous :
template<class CompareT> void compare(){ // is this A ? cout << is_same< A<*> , CompareT >::value; // A<> ???? } int main(){ compare< A<int> >(); }</p> <p>Dans ce cas d'utilisation, A<int> doit s'aligner sur A<>, ce qui donne une sortie de 1.</p> <p><strong>Solution :</strong></p> <p>Le code ci-dessous vous permet de vérifier si une classe est une version spécialisée de un modèle :</p> <pre class="brush:php;toolbar:false">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>{}, "");
En appelant is_specialization, vous pouvez identifier si une classe est une spécialisation de modèle, vous offrant ainsi un contrôle plus fin sur la structure et le comportement de votre code.
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!