У вас есть две проблемы.
Один из них связан с ответом здесь: C ++ 11 lambdas: захват переменной-члена gotcha , а именно то, что лямбда-выражение захватывает переменную-член через this
, что является единственным способом сделать это. Это означает, что вы всегда получите текущее значение члена b
.
Даже если вы исправите это, myFunction
создается один раз в начале, то есть оно будет захватывать текущее (неинициализированное!) Значение b во время создания.
Вам нужно сгенерировать лямбду именно тогда, когда вызывается get_myFunction()
, и чтобы она захватила текущее значение b
:
class A
{
double b;
public:
void set_b(double value){b = value;};
std::function<double(double)> get_myFunction() {
double localb = b;
return ([=] (double x) { return localb*x; });
}
};