2015-07-11 7 views
1

Так у меня есть класс:C++ Как получить доступ к закрытому члену в классе внутри станд :: for_each

class base 
{ 
public: 
    base (int member) : m_member(member) {}; 
    ~base() {}; 

    void func(void) 
    { 
    std::for_each(something.begin(), something.end(), [](OtherClass& myOtherClass) 
    { 
     GLfloat* stuff = myOtherClass.GetStuff(); 
     m_member = 1; //How can I access the private member here? 
    }); 
    }; 
private: 
    int m_member; 
} 

Я получаю это предупреждение:

'm_member' requires the compiler to capture 'this' but the current default capture mode does not allow it 

И эту ошибку:

'm_member' undeclared identifier 

Как я могу получить доступ к частному члену m_member внутри foreach?

+2

Вы можете передать 'this' в качестве параметра лямбда. –

ответ

2

В скобках перед вашей лямбдой вы можете захватить символы, необходимые для тела функции. В этом случае вам нужно захватить this, потому что вы используете его член:

[this](OtherClass& myOtherClass) 
    { 
     GLfloat* stuff = myOtherClass.GetStuff(); 
     m_member = 1; 
    }); 

Смотрите также cpp reference о лямбды:

capture-list - comma-separated list of zero or more captures, optionally beginning with a capture-default. Capture list can be passed as follows (see below for the detailed description):

[a,&b] where a is captured by value and b is captured by reference.

[this] captures the this pointer by value

[&] captures all automatic variables odr-used in the body of the lambda by reference

[=] captures all automatic variables odr-used in the body of the lambda by value

[] captures nothing

+0

Отлично !!!! Благодаря! – waas1919

+0

Уверен :) Мне нужно было подождать 10 минут, чтобы сделать это;) – waas1919

+1

О, я не знал, что это ограничение существует! –