Spécialisation partielle des fonctions membres de classe en C
La spécialisation partielle permet la spécialisation d'une instanciation spécifique d'une classe ou d'une fonction basée sur un modèle. Cela peut être utile lorsqu'un comportement différent est souhaité pour différentes valeurs d'argument de modèle. Cependant, une pierre d'achoppement souvent rencontrée par les débutants est la spécialisation partielle des fonctions membres de classe.
Pour spécialiser partiellement une fonction membre de classe, une fonction modèle non membre doit être définie qui prend le modèle de classe partiellement spécialisé comme modèle. paramètre. Par exemple, considérons le code suivant :
template <typename T, int nValue> class Object { private: T m_t; Object(); // Private constructor public: Object(T t): m_t(t) {} T Get() { return m_t; } Object& Deform() { m_t *= nValue; return *this; } }; // Partial specialization of the Deform() method for nValue = 0 template <typename T> Object<T, 0>& Object<T, 0>::Deform() { this->m_t = -1; return *this; }
Dans cet exemple, la fonction membre Deform() est partiellement spécialisée pour le cas où nValue est 0. Pour toutes les autres valeurs de nValue, le comportement par défaut est appliqué. Cela permet un comportement personnalisé lorsque nValue est 0, tout en conservant l'implémentation générique pour les autres cas.
Remarque : Il est important de noter que vous ne pouvez pas spécialiser partiellement une seule fonction membre. La classe entière doit être partiellement spécialisée afin de spécialiser partiellement une fonction membre. Cela se reflète dans le code correct ci-dessous :
template <typename T> class Object<T, 0> { private: T m_t; Object(); // Private constructor public: Object(T t): m_t(t) {} T Get() { return m_t; } Object& Deform() { std::cout << "Spec\n"; m_t = -1; return *this; } };
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!