Maison >développement back-end >C++ >Comment le mot-clé « auto » de C 17 simplifie-t-il la déduction des paramètres de modèle ?

Comment le mot-clé « auto » de C 17 simplifie-t-il la déduction des paramètres de modèle ?

Barbara Streisand
Barbara Streisandoriginal
2024-12-04 13:47:10545parcourir

How Does C  17's `auto` Keyword Simplify Template Parameter Deduction?

Avantages de la déduction automatique des paramètres de modèle en C 17

C 17 introduit l'option mot-clé dans les paramètres du modèle, un ajout important qui offre de nombreux avantages.

Extension naturelle de auto pour l'instanciation de modèle

Similaire au mot-clé auto utilisé pour la déclaration de variable, < automatique> dans les paramètres du modèle permet de déduire le type des paramètres non-types au moment de l'instanciation. Cela élimine le besoin de spécifier explicitement le type de paramètre, comme le montre l'exemple ci-dessous :

auto v1 = constant<5>;      // v1 == 5, decltype(v1) is int
auto v2 = constant<true>;   // v2 == true, decltype(v2) is bool
auto v3 = constant<'a'>;    // v3 == 'a', decltype(v3) is char

Confort amélioré

Remplacement des déclarations de type explicites par simplifie considérablement le code du modèle, le rendant plus lisible et maintenable. Considérons le code suivant :

template <typename Type, Type value> constexpr Type constant = value;
constexpr auto const IntConstant42 = constant<int, 42>;

Ce code peut être réécrit avec comme suit :

template <auto value> constexpr auto constant = value;
constexpr auto const IntConstant42 = constant<42>;

Concision du code améliorée

est particulièrement utile lorsque vous travaillez avec des paramètres de modèle variadiques. Par exemple, la création d'une liste de valeurs constantes au moment de la compilation devient plus concise et simple :

template <auto ... vs> struct HeterogenousValueList {};
using MyList1 = HeterogenousValueList<42, 'X', 13u>;

template <auto v0, decltype(v0) ... vs> struct HomogenousValueList {};
using MyList2 = HomogenousValueList<1, 2, 3>;

En comparaison, obtenir la même fonctionnalité dans la version antérieure à C 17 nécessiterait des constructions plus verbeuses et alambiquées impliquant des modèles supplémentaires.

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!

Déclaration:
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