Maison > développement back-end > C++ > Pourquoi la spécialisation explicite des fonctions de modèle échoue-t-elle dans les classes de modèles sans espace de noms en C ?

Pourquoi la spécialisation explicite des fonctions de modèle échoue-t-elle dans les classes de modèles sans espace de noms en C ?

Linda Hamilton
Libérer: 2024-11-30 21:37:12
original
258 Les gens l'ont consulté

Why Does Explicit Specialization of Template Functions Fail in Non-Namespace-Scoped Template Classes in C  ?

Spécialisation explicite des fonctions de modèles dans les classes de modèles en C

Erreur :

Les développeurs tentent spécialiser explicitement les fonctions de modèle dans des classes de modèles sans espace de noms peut rencontrer des erreurs de compilation dans GCC. Le code suivant présente un tel problème :

struct tag {};

template< typename T >
struct C
{   
    template< typename Tag >
    void f( T );                 // declaration only

    template<>
    inline void f< tag >( T ) {} // ERROR: explicit specialization in
};                               // non-namespace scope 'structC<T>'
Copier après la connexion

Résolution :

La spécialisation explicite des fonctions membres n'est pas prise en charge dans les classes de modèles sans espace de noms. Envisagez plutôt de transférer les appels vers une fonction membre d'un type intermédiaire partiellement spécialisé :

template<class T, class Tag>
struct helper {
    static void f(T);   
};

template<class T>
struct helper<T, tag1> {
    static void f(T) {}
};

template<class T>
struct C {
    // ...
    template<class Tag>
    void foo(T t) {
        helper<T, Tag>::f(t);
    }
};
Copier après la connexion

Cette approche exploite la spécialisation partielle des modèles pour obtenir le comportement souhaité tout en respectant les exigences syntaxiques de GCC.

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal