web-dev-qa-db-fra.com

Est-il possible de passer auto en argument en C++?

Existe-t-il un moyen de passer auto comme argument à une autre fonction?

int function(auto data)
{
    //DOES something
}
31
user3639557

Si vous voulez que cela signifie que vous pouvez passer n'importe quel type à la fonction, faites-en un template:

template <typename T> int function(T data);

Il existe une proposition pour C++ 17 d'autoriser la syntaxe utilisée (comme C++ 14 le fait déjà pour les lambdas génériques), mais ce n'est pas encore standard.

38
Mike Seymour

Les modèles sont comme cela que vous faites avec des fonctions normales:

template <typename T>
int function(T data)
{
    //DOES something
}

Alternativement, vous pouvez utiliser un lambda:

auto function = [] (auto data) { /*DOES something*/ };
19
TartanLlama

Je ne sais pas quand cela a changé, mais la syntaxe de Question est actuellement possible avec c ++ 14:

https://coliru.stacked-crooked.com/a/93ab03e88f745b6c

Il n'y a qu'un avertissement à ce sujet:

g ++ -std = c ++ 14 -Wall -pedantic -pthread main.cpp && ./a.out main.cpp: 5: 15: avertissement: utilisation de 'auto' dans la déclaration de paramètre uniquement disponible avec -fconcepts fonction void (auto data)

Avec c ++ 11, il y a une erreur:

main.cpp: 5: 15: erreur: utilisation de 'auto' dans la déclaration de paramètre uniquement disponible avec -std = c ++ 14 ou -std = gnu ++ 14

0
Sebastian