Chr*_*s G 1 c++ foreach lambda c++11
我正在尝试掌握 C++ 中的 lambdas。
这是我的代码(为了理解而简化了变量):
template <typename Container>
void do_function(const Container& c, const item &w){
complex<double> a(w.x1, w.y1);
complex<double> b(w.x3, w.y3);
for_each(begin(c), end(c), [] {
p->inner_function(a, b);
});
}
Run Code Online (Sandbox Code Playgroud)
我知道 p 没有任何意义,它只是为了说明我想做什么。
本质上,我想在任何类型的容器(列表/向量等)上使用这个函数,这些容器包含一个名为 Animal 的抽象类的指针实例。这些实例都有一个“inner_function(complex, complex)”的实现。
我想在 for_each 循环中使用 C++ 11 中的 lambdas 在每个循环中调用该函数..
不过网上的例子都有些混乱。
看来,你想用
std::for_each(std::begin(c), std::end(c), [=](Animal* p) { p->inner_function(a, b); });
Run Code Online (Sandbox Code Playgroud)
您的 lambda 函数将需要采用一个参数,如std::for_each()预期的那样可以使用*std::begin(c). 需要显式声明参数。您还需要选择如何捕获参数a和b。使用[]意味着没有捕获的上下文,您根本无法访问任何局部变量。您可以使用
[=] 按值捕获上下文中的所有变量。[&] 通过引用捕获上下文中的所有变量。[=,&a]将按b值和a按引用捕获。[&,b] 相同但以不同的默认值开始[&a,b] 相同但明确列出所有参数。使用std::bind()表达式可能更容易,实际上:
std::for_each(std::begin(c), std::end(c), std::bind(&Animal::inner_function, _1, a, b));
Run Code Online (Sandbox Code Playgroud)
由于您没有提出问题,因此不清楚问题是什么。