【发布时间】:2021-08-30 12:26:37
【问题描述】:
我是第一次使用 lambda。我应该写一个函数 walk() ,它接受一个 lambda 函数作为参数。
在标题中,我将所述功能声明为:
template<class T>
void walk(T operation) const;
我们应该在 .inl 中定义函数,我这样做是这样的:
template<class T>
void Sea::Grid2D<T>::walk(T operation) const{
for(auto a : Sea::Grid2D<T>::grid){
operation(a);
}
}
我的问题出现在这一点上,因为我们得到了一个测试类,它像这样调用我们的 walk() 函数。
grid.walk([&](int const &cell) { sum += cell; });
这个walk函数的调用导致如下错误:
错误:无法将 'testWalkAndFilter()::
' 转换为 'int'
43 | grid.walk([&](int const &cell) { sum += cell; });
如何将我的 lambda 函数转换为 int 或需要的参数?
在尝试解决这个问题时。我也尝试给 walk 函数一个引用,或者一个 const 引用参数,但到目前为止没有任何效果。
【问题讨论】:
-
Sea::Grid2D<T>中的T和T operation中的T是否应该始终是同一类型?目前,您正在强制它们相同。
标签: c++ function templates lambda parameters