Maison > développement back-end > C++ > Comment spécialiser explicitement une fonction de modèle dans une classe de modèle en C ?

Comment spécialiser explicitement une fonction de modèle dans une classe de modèle en C ?

Mary-Kate Olsen
Libérer: 2024-11-27 17:46:14
original
845 Les gens l'ont consulté

How to Explicitly Specialize a Template Function Within a Template Class in C  ?

Spécialisation explicite d'une fonction de modèle dans une classe de modèle

En C, la spécialisation explicite d'une fonction de modèle au sein d'une classe de modèle peut être délicate problème de syntaxe. Considérez l'extrait de code suivant :

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
};
Copier après la connexion

Dans cet exemple, le compilateur génère une erreur lorsqu'il tente de spécialiser explicitement la fonction membre f avec la balise tag. Pour résoudre ce problème, il est nécessaire de déplacer la spécialisation explicite en dehors de la classe, mais la syntaxe appropriée n'est pas immédiatement évidente.

La solution fournie suggère d'utiliser une structure d'assistance avec des fonctions de membre statiques pour transférer les appels vers le membre spécialisé. function :

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

Avec cette approche, la spécialisation explicite est contenue dans une structure non imbriquée, satisfaisant aux exigences de la syntaxe de spécialisation explicite.

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!

source:php.cn
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