簡體   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