Предположим, у вас есть функция, которая принимает std::vector
любого типа и обрабатывает его некоторым образом:
template<typename T>
void foo(std::vector<T> &vec) {
// work with vec
}
С C++14
мы можем достичь того же с помощью лямбд.В этом случае мы называем их родовыми лямбдами , поскольку мы вводим для них шаблонный вывод:
auto foo_lambda = [](std::vector<auto> &vec) {
// work with vec
};
Но наши варианты кажутся мне довольно ограниченными.Предположим, что мне нужно не только ввести вывод типа, но и ввести значения шаблонов.Например, давайте изменим std::vector
на std::array
:
template<typename T, std::size_t size>
void foo(std::array<T, size> &arr) {
// work with arr
}
При работе с шаблонными функциями мы можем ввести значение шаблона, которое можно использовать для соответствия потребностям аргумента.Аккуратно.
Я хотел добиться такой же функциональности с помощью общих лямбда-выражений, но я не смог этого сделать.
Существует ли способ ввести аналогичное выведенное значение в лямбда-выражение, чтобы любойstd::array
s можно использовать с указанной лямбдой, аналогично второй версии функции foo()
, указанной выше?
РЕДАКТИРОВАТЬ: Как указано в комментариях Evg , мой vector<auto>
синтаксис нестандартного расширения GCC.Подробнее см. этот ответ со ссылкой на этот документ .