Лямбда-функции очень удобны и уменьшают код. В моем случае мне нужны лямбды для параллельного программирования. Но для этого требуются указатели захвата и функции. Мое решение здесь. Но будьте осторожны с объемом захваченных вами переменных.
template<typename Tret, typename T>
Tret lambda_ptr_exec(T* v) {
return (Tret) (*v)();
}
template<typename Tret = void, typename Tfp = Tret(*)(void*), typename T>
Tfp lambda_ptr(T& v) {
return (Tfp) lambda_ptr_exec<Tret, T>;
}
Пример
int a = 100;
auto b = [&]() { a += 1;};
void (*fp)(void*) = lambda_ptr(b);
fp(&b);
Пример с возвращаемым значением
int a = 100;
auto b = [&]() {return a;};
int (*fp)(void*) = lambda_ptr<int>(b);
fp(&b);