std::for_each(my_data.begin(), my_data.end(),
[&result](const auto & what) {
result += what;
});
这是我从 Quora 得到的答案。我问为什么 C++ 采用 lambda。有人回复了这两段代码,上面使用 lambdas,下面则不然。它们应该是等价的,代码的差异突出了 lambdas 的优势。
template <typename T>
class add_to_impl {
T & m_result;
public:
add_to_impl(T & to): m_result(to) {}
void operator () (const T & what) { m_result += what; }
};
template <typename T>
add_to_impl<T> add_to(T & result) {
return add_to_impl<T>(result);
}
// ... other bunch of stuff
// ... somewhere else ...
std::for_each(my_data.begin(), my_data.end(), add_to(result));
但是,我看不到 add_to 函数将如何生成与 lambda 等效的行为。
通过阅读 lambda,“结果”似乎是一个全局变量。在我的脑海中,我认为 add_to 函数应该如下实现,以便等效于 lambda:
add_to_impl<T> result; //result being some global variable
template <typename T>
void add_to(T & what) {
result(what); // adding to result, matching what the lambda code does.
}