Maison >développement back-end >C++ >Comment les guides de déduction de modèles C 17 simplifient-ils l'inférence d'arguments de modèle ?
Guides de déduction des modèles C 17 : une explication simple
Que sont les guides de déduction des modèles ?
Les guides de déduction de modèles sont une fonctionnalité introduite dans C 17 qui aide le compilateur à déduire les arguments de modèle pour les constructeurs. Ils fournissent un moyen de spécifier comment les arguments du constructeur et leurs types correspondent aux paramètres du modèle.
Pourquoi (et quand) en avons-nous besoin ?
Des guides de déduction de modèles sont nécessaires lorsque la déduction des arguments du modèle à partir des arguments du constructeur ne peut pas être effectuée directement à partir des types d'arguments. Par exemple, l'initialisation d'un vecteur à partir d'une paire d'itérateurs nécessite la connaissance du type de valeur sous-jacent de l'itérateur.
Comment les déclarer ?
Les guides de déduction de modèles sont déclarés à l'aide la syntaxe suivante :
template <template-argument-list> class-template id (function-parameter-list) -> deduced-type;
Ici, template-argument-list indique les arguments du modèle qui sont en cours de déduction, function-parameter-list représente les arguments du constructeur et deduced-type est le type de modèle déduit résultant.
Exemple :
Considérez le constructeur std::vector qui prend une paire d'itérateurs :
template <typename Iterator> void func(Iterator first, Iterator last) { vector v(first, last); }
Pour déduire le type T du vecteur, nous devons utiliser une déduction de modèle guide :
template <typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
Ce guide demande au compilateur de déduire T comme type_valeur des std::iterator_traits pour le type d'itérateur donné.
Initialisation d'agrégat avec guides de déduction :
Les guides de déduction modèles peuvent également être utilisés avec des agrégats initialisation :
template <typename T> struct Thingy { T t; }; Thingy(const char *) -> Thingy<std::string>; Thingy thing{"A String"}; //thing.t is a `std::string`.
Dans cet exemple, le guide de déduction permet l'initialisation de Thingy avec un const char* tout en déduisant T comme std::string.
Remarque : Les guides de déduction ne sont utilisés que pour déduire des arguments de modèle. Le processus d'initialisation proprement dit suit les mêmes règles que précédemment, quel que soit le guide de déduction choisi.
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!