Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Spécialisation Partielle de Modèle | Spécialisation de Template
Modèles C++
course content

Contenu du cours

Modèles C++

Modèles C++

1. Création du Premier Modèle
2. Utilisation des Templates
3. Modèles de Classe
4. Spécialisation de Template

book
Spécialisation Partielle de Modèle

La spécialisation de modèle pour un modèle à un seul paramètre est simple, mais elle devient plus complexe avec plusieurs paramètres. C'est là que la spécialisation partielle de modèle entre en jeu. Elle vous permet de créer une version spécialisée d'un modèle pour des sous-ensembles spécifiques de types ou de valeurs.

cpp

main

copy
12345678
// What if `T1` and `T2` are the same type? // Or what if you want to define special behavior when `T1` is a `std::string`? template<typename T1, typename T2> void TemplateExample(T1 first, T2 second) { std::cout << "Generic template!" << std::endl; }

Syntaxe de la spécialisation partielle de modèle

Vous pouvez considérer la spécialisation partielle de modèle comme une forme de surcharge de modèle. Voici les règles à suivre:

Dans la spécialisation partielle, vous définissez une nouvelle version d'une fonction modèle avec certains de ses paramètres fixés à des types spécifiques tout en laissant les autres génériques. Le compilateur utilise cette version spécialisée chaque fois qu'il rencontre des types correspondants lors de l'instanciation du modèle.

cpp

main

copy
123456789101112131415
#include <iostream> // Primary template template<typename T1, typename T2> bool IsSameType(T1 first, T2 second) { return false; } // Partial specialization for when both types are the same template<typename T> bool IsSameType(T first, T second) { return true; } int main() { std::cout << IsSameType(10, 'a') << std::endl; std::cout << IsSameType("Hello", "World") << std::endl; }

C'est une façon d'utiliser la spécialisation de template, mais il existe un autre scénario plus courant.

cpp

main

copy
123456789101112131415
#include <iostream> // Primary template template <typename T1, typename T2> // General case void Template(T1 a, T2 b) { std::cout << "General" << std::endl; } // Partial specialization for when `T1` is `bool` template <typename T2> // Special case when the first type is `bool` void Template(bool a, T2 b) { std::cout << "Special" << std::endl; } int main() { Template(false, 25); Template(100, 300); }
Qu'est-ce que la spécialisation partielle de template ?

Qu'est-ce que la spécialisation partielle de template ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
We're sorry to hear that something went wrong. What happened?
some-alt