C 17 a introduit le concept de guides de déduction de modèles, offrant aux développeurs un outil puissant pour améliorer l'inférence de type. Cet article dévoile l'essence des guides de déduction de modèles, en explorant leur objectif et leur mise en œuvre.
Les guides de déduction de modèles sont des instructions qui informent le compilateur sur la façon de déduire les arguments du modèle pendant initialisation du constructeur. Ils fournissent un moyen de spécifier des paramètres de modèle en fonction d'arguments du constructeur qui peuvent ne pas correspondre directement aux paramètres de type du modèle.
Les guides de déduction de modèles deviennent essentiels lorsque le Le type de modèle ne peut pas être déduit uniquement du type des arguments du constructeur. La classe std::vector fournit un exemple classique. Son constructeur accepte une paire d'itérateurs, mais le type de modèle (T) doit être déduit en fonction des caractéristiques iterator_traits. Sans guide de déduction de modèles, une spécification de type explicite serait nécessaire, ce qui peut être verbeux et sujet aux erreurs.
Les guides de déduction de modèles adhèrent à la syntaxe suivante :
template<typename... Args> ReturnType(Args...) -> Template<DeducedArguments...>;
Par exemple, le constructeur de paire d'itérateurs vectoriels serait déclaré comme :
template<typename Iterator> vector(Iterator b, Iterator e) -> vector<typename std::iterator_traits<Iterator>::value_type>;
Les guides de déduction de modèles s'étendent au-delà des classes et des constructeurs, permettant leur utilisation avec l'initialisation globale :
template<typename T> struct Thingy { T t; }; Thingy(const char *) -> Thingy<std::string>; Thingy thing{"A String"}; //thing.t is a 'std::string'
Il est important de noter que les guides de déduction de modèles n'équivalent pas aux constructeurs. Ils déterminent uniquement le type de modèle lors de l'initialisation, tandis que la construction réelle n'est pas affectée par le guide de déduction.
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!