Лямбда не выполняется, пока вы не выполните ее, написав v()
в конструкторе Foo
.И если вы это сделаете, то это будет так же, как если бы вы вызывали функцию get()
непосредственно из конструктора, что нормально, , если get
не является функцией virtual
, и вы реализовали get
таким образом, чтобы его также можно было вызывать из конструктора.Например, если вы сделаете это:
В этом случае реализация get
не требует, чтобы объектбыть полностью построенным.
Кроме того, хотя это не связано с вашим вопросом, но все же обратите внимание, что, поскольку вы используете C ++ 11 (как подразумевается при использовании лямбды), почему бы вам неиспользовать std::function
вместо boost::function
(как я делал в своей демоверсии )?Если ваш компилятор поддерживает лямбду, он также будет поддерживать std::function
, поскольку его реализация очень тривиальна.