Spécialisation explicite en dehors de la portée de l'espace de noms: une erreur dans la programmation de modèle G non standard implique la spécialisation explicite des membres de la classe pour une génération de code efficace. Cependant, le placement des spécialisations explicites est crucial, comme le montre l'extrait de code suivant:
modèleLorsqu'elle est compilée avec G, ce code entraîne l'erreur:
templateExplicit Specialization in non-Namespace Scope 'class Cconstraint'class CConstraint { // ... template void Verify(int position, int constraints[]) { } template void Verify (int, int[]) { } };
pour comprendre cette erreur, nous devons examiner la norme C, qui dictates qui dictentent un membre explicite. Dans l'exemple ci-dessus, CConstraint n'est déclaré dans aucun espace de noms, et donc la spécialisation explicite de Verify
templatecompilateurs VC, cependant, sont non conformes dans ce cas, permettant des spécialisations explicites à l'extérieur de l'espace de noms de noms. Ce comportement est non standard et ne doit pas être utilisé. Voici une version corrigée du code:class CConstraint { // ... template void Verify(int position, int constraints[]) { } template void Verify (int, int[]) { } };
Espace de noms MyNamespace { modèle
En encapsulant CConstraint dans l'espace de noms MyNamespace, nous nous assurons que ses spécialisations explicites sont également déclarées dans cet espace de noms, résolution de l'erreur de compilation. Réponse:
Détail de l'espace de noms {
modèle
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3