Если вы хотите захватить this
, то вам следует захватить this
:
return [this](){ return value; };
Однако это сопровождается обычным предупреждением о том, что this
, захваченный лямбдой, может использоваться только как пока this
жив.
PS
Я знаю, что для этой реализации ее можно запрограммировать намного проще (оставьте лямбда-выражение в стороне), [ ...]
Если вы хотите, чтобы вызываемый элемент возвращал вам value
из A
, тогда я бы не знал, как это сделать (легко) без использования лямбда-выражения , Я скорее вижу проблему в вашем дизайне. Как упомянуто выше, вызывающая сторона должна быть осторожна, чтобы использовать возвращенный std::function
, пока объект A
жив. Существует неочевидная зависимость с тем, что ваш A
может быть легко использован неверно:
auto f = A{}.get_value();
Это создает сломанный std::function<int()>
. Честно говоря, ваш код - это то, что я бы назвал «инкапсуляция прошла ужасно неправильно». Конечно, ваш код является лишь примером, но рассмотрим этот пример:
struct A { int value = 0; };
int main() {
A a;
auto f = [&](){ return a.value; };
}
Здесь вызывающая сторона (ie пользователь A
) имеет зависимость (удобство использования f
зависит от времени жизни a
) явно в их коде.