【发布时间】:2020-07-21 09:05:18
【问题描述】:
目前,我正在尝试在一个类中构建类似 Java 的 forEach ,在该类中我传递一个 lambda 并为每个项目调用它。目前我是这样实现的:
Foo.h
class Foo
{
public:
Foo();
void forEach(void(*lambda)(Bar*));
private:
SpecialList mElements;
};
Foo.cpp
#include "Foo.h"
void Foo::forEach(void(*lambda)(Bar*))
{
for (auto& v : mElements)
{
// Try/catch for stopping
try {lambda(&v.second);}
catch (int) {break;}
}
}
main.cpp
int main() {
Foo foo();
foo.forEach([](Bar* bar) {
std::cout << bar->something() << std::endl;
});
return 0;
}
它工作得很好,但我希望能够通过引用将元素传递到 lambda 中,以便以后能够像本示例中那样使用:
main.cpp
int main() {
Foo foo();
foo.forEach([&var1](Bar* bar) {
std::cout << var1 << bar->something() << std::endl;
});
return 0;
}
我们怎样才能实现这样的目标?我一直在尝试,但它给出了错误 no proper conversion function from... to... 并尝试搜索以前的问题并查看 std::for_each 之类的函数如何工作但不能对此有所了解。谢谢。
【问题讨论】:
-
看看std::function
-
您可以使用 from std::function 并将对数据的引用作为另一个参数传递。
-
C++11 提供了这样的功能。看:en.cppreference.com/w/cpp/algorithm/for_each
-
[OT]:最好有
void(*func)(Bar&)而不是void(*func)(Bar*),因为Bar不能是nullptr
标签: c++ visual-studio function lambda parameter-passing