Les avantages de l'auto dans les paramètres de modèle en C++17
Quels sont les avantages de auto
dans les paramètres de modèle qui sera (éventuellement) être introduit avec C++17?
Est juste une extension naturelle de auto
quand je veux instancier le modèle de code?
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
Quoi d'autre dois-je tirer profit de cette fonctionnalité?
- Que des Informations supplémentaires Déclarant non-type de modèle arguments avec auto
- Chaque maintenant et puis je voir les questions comme celui-ci ou celui-ci ou ce one sur StackOverflow.
template < auto >
fera de ces askers heureux. - Je pensais que le principal amincit était
std::vector<auto> v{1,2,3,4,5};
et des choses difficiles comme appelable types de modèle args (esp lambdas). - Non, ce n'est pas ce qu'il fait. Le
auto
va sur la définition, pas au point d'utilisation. - une autre fonctionnalité qui fait partie des Concepts TS, mais pas en C++17. Le p0127 utilisation de
auto
n'entre pas en conflit avec elle cependant.
Vous devez vous connecter pour publier un commentaire.
La
template <auto>
fonctionnalité (P0127R1) a été acceptée en C++ dans l'ISO C++ 2016 réunion à Oulu, en Finlande.Un
auto
mot-clé dans un paramètre de modèle peut être utilisé pour indiquer une non-type de paramètre le type de qui est déduite au moment de l'instanciation. Il aide à penser à cela comme un moyen plus pratique de l'écriture:Par exemple,
peut maintenant être écrite comme
où vous n'avez pas besoin de préciser le type de plus. P0127R1 comprend également quelques simples mais bons exemples où l'utilisation d'
template <auto>
avec variadic paramètres du modèle est très pratique, par exemple pour les implémentations de la compilation des listes de valeurs constantes:En pré-C++1z, tandis que
HomogenousValueList
pourrait être simplement écrit quel'écriture d'un équivalent de
HeterogenousValueList
ne serait pas possible sans emballage les valeurs de certains autres modèles, par exemple:En fait, le cas de valeurs réelles dans l'oecm de l' (original) réponse est explicitement pas couverts non-type de paramètre du modèle.
Voir l'exemple donné dans la proposition:
Modifier §14.3.2 paragraphe 2:
Viens de tombé sur la même idée fausse de moi-même il y a quelques jours.
Voici un autre exemple (présenté à l'origine par @Rakete1111 une réponse à la modèle de paramètre de modèle de type inconnu):
L'extraction de la valeur de la TAILLE sans connaître son type: