У меня возникли проблемы в части моей программы, где я передаю объект, который действует как лямбда-функция, другой функции (мне нужно зафиксировать константу этого указателя, чтобы я не мог использовать настоящую лямбда). Это вызывает вызов конструктора копирования моей лямбды, который снова вызывает конструктор копирования, и в конечном итоге стек переполняется. Я понимаю, что происходит, но я не уверен, почему конструктор копирования вызывает сам себя или как это исправить. Я воспроизвел проблему ниже.
Компилятор: MSVC 2010
#include <functional>
void synchronizedExecution(std::function<void()> function) {
function();
}
int main(int argc, char *argv[])
{
int b = 0;
class Function : public std::function<void()> {
public:
int& b;
Function(int& b) :
b(b) {}
void operator()() {}
} function(b);
synchronizedExecution(function);
return 0;
}
main()
выглядит неправильно (по крайней мере, отсутствует точка с запятой после объявления!). - person πάντα ῥεῖ   schedule 06.02.2014b
. - person Sion Sheevok   schedule 06.02.2014std::function
— ужасная идея. Зачем ты это делаешь? - person Yakk - Adam Nevraumont   schedule 07.02.2014