Я использую 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). Итак, мой вопрос в том, в чем проблема? Что мне не хватает?
Спасибо.
1 ответ
Чтобы зафиксировать указатель this в лямбде, вы используете a.foo([this]()
[this] захватывает указатель this по значению [&] захватывает все автоматические переменные odr-используемые в теле лямбды по ссылке
Из документов
Похожие вопросы
Новые вопросы
c++
C ++ - это язык программирования общего назначения. Первоначально он был разработан как расширение C и имеет аналогичный синтаксис, но теперь это совершенно другой язык. Используйте этот тег для вопросов о коде (который должен быть) скомпилирован с помощью компилятора C ++. Используйте тег для конкретной версии для вопросов, связанных с конкретной версией стандарта [C ++ 11], [C ++ 14], [C ++ 17], [C ++ 20] или [C ++ 23] и т. Д. .
this
не захватывается. Вам нужно это запечатлеть.