2015-07-27 1 views
4

Je voudrais savoir si le comité standard a envisagé d'étendre le mot-clé C++ 14 auto pour déduire le type de paramètre de modèle de fonction, tel qu'il existe aujourd'hui dans les lambdas génériques. (as can be seen nicely depicted in this answer)type de paramètre automatique dans les fonctions

Parce qu'il fonctionne dans les fonctions lambda, il devrait également fonctionner dans n'importe quelle fonction. Bien sûr, il serait tout à fait double emploi avec la syntaxe classique:

template< typename T > 
void f(T param); 

Mais être capable d'écrire cela, pour le même résultat:

void f(auto param); 

Je pense que permettrait moins de code encrassée (plus court plus net plus propre) et permettent une grande cohérence dans ce cas d'utilisation:

auto v = func1(); 
f(v); 

Comme vous pouvez le voir, nous avons utilisé le type automatique deducer de déclarer v, mais nous devons utiliser soit ah fonction paramétrée par type ard, ou un modèle f.
En combinaison avec auto, nous devrions utiliser auto, ce qui serait plus cohérent.

EDIT: this question demande effectivement effectivement la même chose, mais moins directement. Et n'a pas encore obtenu la réponse que donne user657267, que je reproduis et que j'étends ci-dessous.

+0

Ce sera en C++ 17. – inf

+0

[Est-ce que auto est un paramètre dans une fonction régulière une extension GCC 4.9?] (Http://stackoverflow.com/q/25879705/3953764) –

+0

Intéressant, qui aurait pensé que nous pourrions voir quelque chose comme ça en C++ :) – Andre

Répondre

4

Ok, donc grâce à Piotr pointant vers cette autre question demandant la même chose, j'ai trouvé les informations contenues dans un commentaire qui résoudra ce, la voici:

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4040.pdf

la page 16, chapitre 5.1 .1 nommé generic functions

une fonction générique est un modèle de fonction dont paramètre-modèle-liste a un parameterdeclaration dont le type spécificateur est soit automatique ou un constr Ained-type-nom.

[Exemple:

auto f(auto x); // Ok 
void sort(C& c); // Ok (assuming C names a concept) 

- exemple final]

Cela semble plutôt positif :)

suivi du libellé évident excpected, qui correspond à lambda générique:

La déclaration d'une fonction générique a un modèle e-parameter-list qui consiste en un modèle de paramètre de type inventé pour chaque occurrence de .

[Exemple: Les déclarations de fonctions génériques suivantes sont équivalentes:

template<typenaem T> 
conxtexpr bool C() { ... } 
auto f(auto x, const C& y); 
template<typename T1, C T2> 
auto f(T1 x, const T2& y); 

Le type de y est un paramètre de type contraint par C. - Exemple d'extrémité]

+1

également décrit à cppreference: http://en.cppreference.com/w/cpp/language/constraints – Cubbi