繁体   English   中英

C++ 中的函子和 lambda

[英]Functors and lambdas in C++

std::for_each(my_data.begin(), my_data.end(),
[&result](const auto & what) {
    result += what;
});

这是我从 Quora 得到的答案。 我问为什么 C++ 采用 lambdas。 有人用这两段代码回应,上面使用 lambdas,下面使用其他代码。 它们应该是等价的,代码上的差异突出了 lambda 的优势。

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.
}

不,缺少任何其他上下文是名称错误,因为在范围内没有所谓的result 据推测,它是在未显示的代码中声明的。

显示的函数对象舞蹈相当于拉姆达,但作为@Someprogrammerdude笔记,这是更好地喜欢写东西

result = std::accumulate(my_data.begin(), my_data.end(), result);

假设我们正在谈论一种类型,其中+=+=做一致的事情

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM