int i = 9;
struct_variable.f = [i](T struct_variable&) {
do_something_with_capture_variable(i);
...
struct_variable.f = another_compatible_std_function;
//do something else, but never use captured variable after here
...
};
struct_variable.f(struct_variable);
Функция лямбды сохраняются в качестве члена struct_variable.f
(который также напечатало std::function
), так и в обратном вызове struct_variable.f
заменяется another_compatible_std_function
после финиша, используя захваченный переменным.Присвоить новое значение STD :: функции при вызове
Безопасна ли эта практика?
Я хочу сказать «да», пока вы будете осторожны, потому что ситуация аналогична «удалению» объекта во время выполнения одной из его функций-членов. Но это сложно доказать со Стандарта. – aschepler