Maison > développement back-end > C++ > Les fonctions membres peuvent-elles être partiellement spécialisées dans les modèles de classe ?

Les fonctions membres peuvent-elles être partiellement spécialisées dans les modèles de classe ?

Barbara Streisand
Libérer: 2024-11-04 18:48:02
original
752 Les gens l'ont consulté

Can Member Functions Be Partially Specialized in Class Templates?

Spécialisation des fonctions de membre dans les modèles de classe

La spécialisation partielle, permettant la modification de membres spécifiques dans une classe de modèle, n'est pas prise en charge pour les membres fonctions. Cela signifie qu'un code comme celui-ci ne sera pas compilé :

<code class="cpp">template <typename T, bool B>
struct X
{
    void Specialized();
};

template <typename T>
void X<T, true>::Specialized()
{
    ...
}

template <typename T>
void X<T, false>::Specialized()
{
    ...
}</code>
Copier après la connexion

Approches alternatives

  • Spécialisation explicite : Vous pouvez vous spécialiser explicitement une fonction membre en fournissant tous les arguments du modèle.
<code class="cpp">template <>
void X<int, true>::Specialized()
{
    ...
}</code>
Copier après la connexion
  • Fonctions surchargées : Introduire des fonctions surchargées qui ont accès aux variables membres, aux fonctions et aux objets de la classe .
<code class="cpp">template <typename T, bool B>
struct X
{
    template <bool B>
    static void Specialized(int);
};

template <typename T>
inline void X<T, true>::Specialized(int)
{
    ...
}

template <typename T>
inline void X<T, false>::Specialized(int)
{
    ...
}</code>
Copier après la connexion
  • Modèle de classe séparé : S'en remettre à un modèle de classe distinct pour gérer la spécialisation.
<code class="cpp">template <typename T, bool B>
struct SpecializedImpl
{
    static void call()
    {
        ...
    }
};

template <typename T, bool B>
struct X
{
    void Specialized()
    {
        SpecializedImpl<T, B>::call();
    }
};</code>
Copier après la connexion

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