этот фрагмент кода не является чем-то неизвестным разработчикам JS
function get_counter()
{
return (
function() {
var c = 0;
return function() { return ++c; };
})();
}
он в основном создает a, который создает разные счетчики. Поэтому мне было интересно, можно ли сделать то же самое в С++ 11 с новой семантикой лямбда? Я закончил писать этот кусок С++, который, к сожалению, не компилируется!
int main()
{
int c;
auto a = [](){
int c = 0;
return [&](){
cout << c++;
};
};
return 0;
}
поэтому мне было интересно, есть ли способ обхода, который можно скомпилировать, и если есть способ, чтобы компилятор мог правильно запустить этот код? Я имею в виду, что он должен создавать отдельные счетчики, но он также должен собирать мусор (неиспользуемые переменные c).
Кстати, я использую компилятор VS2012 и генерирует эту ошибку:
Error 2 error C2440: 'return' : cannot convert from 'main::<lambda_10d109c73135f5c106ecbfa8ff6f4b6b>::()::<lambda_019decbc8d6cd29488ffec96883efe2a>' to 'void (__cdecl *)(void)' c:\users\ali\documents\visual studio 2012\projects\test\test\main.cpp 25 1 Test