簡體   English   中英

C ++ Lambda捕獲私有類成員

[英]C++ Lambda capture private class member

這是我班級的一部分:

//...
        bool dump_dvars()
        {
            fstream& refvar{ output_file };

            for_each(_array_start, _array_start + *_array_size,
                [&refvar](const void* dvar) -> void
            {
                //work with output_file
            });

            return true;
        }

    private:
        void** _array_start;
        unsigned int* _array_size;
        fstream output_file;
    };

我想訪問我的Lambda的私有成員變量output_file,它位於公共成員函數dump_dvars中。 當我捕獲這個指針時,我無法訪問該變量,因為它是私有的,我也不想讓它公開! 我已經讀過這個問題( 如何讓lambda成為一個類的朋友? )但我不想創建另一個函數。 所以我目前解決的問題是創建對私有成員的引用,並通過引用捕獲列表將該變量傳遞給我的Lambda。

這是一個很好的解決方案和良好的風格還是有更好的解決方案?

你應該在lambda中捕獲'this'。

以下代碼編譯並適用於g ++,clang,VS2010和VS2013。

#include <iostream>

class A
{
public:
    A() : x(5){}
    void f() const
    {
        ([this]()
        {
            std::cout << x << std::endl;
        })();
    }
private:
    int x;
};

int main()
{
    A a;
    a.f();
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM