gpt4 book ai didi

c++ - 在 for_each lambda 中调用对象函数?

转载 作者:太空宇宙 更新时间:2023-11-04 15:20:40 25 4
gpt4 key购买 nike

我正在努力掌握 C++ 中的 lambda。

这是我的代码(为了理解简化了变量):

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);
});
}

我知道 p 没有任何意义,它只是用来说明我想做什么。

本质上,我想在任何类型的容器(列表/vector 等)上使用此函数,该容器包含名为 Animal 的抽象类的指针实例。这些实例都实现了“inner_function(complex, complex)”。

我想在 C++ 11 中使用 lambda 在 for_each 循环中对每个函数调用该函数..

虽然网上的例子有点令人困惑。

最佳答案

看来,你想用

std::for_each(std::begin(c), std::end(c), [=](Animal* p) { p->inner_function(a, b); });

您的 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));

由于您没有提出问题,因此不清楚问题是什么。

关于c++ - 在 for_each lambda 中调用对象函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20169212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com