Maison >développement back-end >C++ >Pourquoi la spécialisation partielle d'un membre de fonction de modèle entraîne-t-elle une « utilisation non valide d'un type incomplet » ?

Pourquoi la spécialisation partielle d'un membre de fonction de modèle entraîne-t-elle une « utilisation non valide d'un type incomplet » ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 02:17:09897parcourir

Why Does Partial Specialization of a Template Function Member Cause

Erreur « Utilisation non valide d'un type incomplet » dans la spécialisation partielle du modèle

Lors de la tentative de création d'une spécialisation partielle d'une fonction de modèle avec la syntaxe :

template <typename T>
void foo<int, T>::bar() {
}

vous pouvez recevoir l'erreur "utilisation non valide d'un type incomplet 'struct foo'." Cela se produit car C vous oblige à spécialiser partiellement l'ensemble du modèle lors de la spécialisation d'une fonction membre.

Pour résoudre ce problème, spécifiez la signature complète du modèle lors de la spécialisation partielle de la classe :

template 
struct foo {
   void bar();
};

template <>
struct foo {
   void bar() {
   }
};

Alternativement, vous pouvez utiliser une solution de contournement telle que la création d'une structure de modèle imbriquée ou la dérivation d'un autre modèle partiellement spécialisé.

Remarque : Ceci s'applique seulement à une spécialisation partielle des fonctions des membres. La spécialisation complète d'une fonction de modèle ne nécessite pas de spécialiser l'intégralité du modèle.

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!

Déclaration:
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