假设您有一个函数,它采用std::vector
任何类型并以某种方式处理它:
template<typename T>
void foo(std::vector<T> &vec) {
// work with vec
}
因为C++14
,我们可以用 lambdas 实现同样的目标。在这种情况下,我们称它们为泛型 lambda,因为我们为它们引入了类似模板的推导:
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
}
在处理模板函数时,我们可以引入一个模板值,它可以用来匹配参数的需要。整洁的。
我想用通用 lambda 实现相同的功能,但我做不到。
有没有办法向 lambda 表达式引入类似的推导值,以便任何std::array
s 都可以与所述 lambda 一起使用,类似于foo()
上面函数的第二个版本?
编辑:正如Evg评论中所述,我的vector<auto>
语法是非标准的 GCC 扩展。有关详细信息,请参阅此文档的答案。