我非常喜欢lambda函数,并且在C++中使用它们的能力是一种享受。但是,由于我习惯了Haskell,那里lambda函数非常适合语法,所以我很难在C++中使用它们而不编写难以阅读的混乱冗长的代码行。
因此,例如,假设我要编写以下内容:
vector<double> foo(10,0.2);
for_each(foo.begin(), foo.end(), [](double x){ std::cout << x << " ";})
这段代码并不难读,lambda表达式非常简短。但是如果在for_each中嵌套了两到三行的函数,那么这将成为我阅读代码的障碍:
vector<double> foo(10,0.2);
randomNumberGenerator bar;
for_each(foo.begin(), foo.end(), [](double x){ std::cout << "hello!"; x+=bar()/(1+bar()); std::cout << x << " ";})
//sorry, I couldn't think of a less stupid example...
这一行文字变得令人厌烦,读起来也变得困难了...
在这种情况下,您更喜欢使用哪种代码约定?我应该写:
for_each(foo.begin(), foo.end(),
[] (double x) {
std::cout << "hello!"
x += bar()/(1+bar());
std::cout << x << " ";
});
或者类似这样的语法?我仍然认为这种语法感觉有点不自然且难以阅读... :(