Я использую std :: bind для привязки функции-члена внутри лямбда-функции в таком коде, как этот:

class A {
...
...

public:
   foo(function<void()> f) {

   }
...
...
};

class B {
...
...
A a;
public:
   B_function_1(){
      a.foo([](){
         some_other_function(bind(&B::B_function_2, this, _1,_2));
   }
...
private:
   B_function_2(arg1, arg2) {
   ...
   }
};

Моя проблема в том, что когда я пытаюсь скомпилировать, у меня появляется эта ошибка:

error: ‘this’ was not captured for this lambda function

А в моем случае это относится к текущему классу (класс B). Итак, мой вопрос в том, в чем проблема? Что мне не хватает?

Спасибо.

0
elmiomar 24 Фев 2016 в 08:59
1
В сообщении об ошибке говорится об этом прямо здесь. this не захватывается. Вам нужно это запечатлеть.
 – 
n. 1.8e9-where's-my-share m.
24 Фев 2016 в 09:06

1 ответ

Лучший ответ

Чтобы зафиксировать указатель this в лямбде, вы используете a.foo([this]()

[this] захватывает указатель this по значению [&] захватывает все автоматические переменные odr-используемые в теле лямбды по ссылке

Из документов

2
systemcpro 24 Фев 2016 в 09:08
Да, был в процессе повторной вставки. пытался скопировать вставку из документов :)
 – 
systemcpro
24 Фев 2016 в 09:09
[] Ничего не собирать (или стратегия выжженной земли?) [&] Захватить любую ссылочную переменную по ссылке [=] Захватить любую ссылочную переменную, сделав копию [=, & foo] Захватить любую ссылочную переменную, сделав копию, но захватить переменную foo по ссылке [bar] Захватить панель, сделав копию; больше ничего не копировать [this] Захватить указатель this включающего класса
 – 
elmiomar
24 Фев 2016 в 09:13