Есть ли способ передать auto как аргумент в С++?
Есть ли способ передать auto в качестве аргумента другой функции?
int function(auto data)
{
//DOES something
}
Ответы
Ответ 1
Если вы хотите, чтобы это означало, что вы можете передать любой тип функции, сделайте его шаблоном:
template <typename T> int function(T data);
Есть предложение для С++ 17, чтобы разрешить используемый вами синтаксис (поскольку С++ 14 уже используется для генерических лямбда), но он еще не стандартный.
Ответ 2
Шаблоны - это то, как вы делаете это с помощью обычных функций:
template <typename T>
int function(T data)
{
//DOES something
}
В качестве альтернативы вы можете использовать lambda:
auto function = [] (auto data) { /*DOES something*/ };
Ответ 3
Я не знаю, когда это изменилось, но в настоящее время синтаксис из Вопроса возможен с С++ 14:
https://coliru.stacked-crooked.com/a/93ab03e88f745b6c
Есть только предупреждение об этом:
g++ -std = С++ 14 -Wall -педантика -pthread main.cpp &&./a.out main.cpp: 5: 15: предупреждение: использование 'auto' в объявлении параметров доступно только с [ CN03] функция void (автоматические данные)
С С++ 11 возникает ошибка:
main.cpp: 5: 15: ошибка: использование 'auto' в объявлении параметров доступно только при -std = С++ 14 или -std = gnu ++ 14