Я ищу контрпример для опровержения утверждения о том, что любое лямбда-выражение может быть выражено как (шаблонная) структура. Другими словами, можно написать компилятор источника-источника, который должен поднять каждое выражение лямбда из любой области действия и выразить его как шаблонный класс функторов.Может ли любое выражение лямбда быть выражено как (шаблонная) структура
Например, насколько конечный пользователь касается, следующие два эквивалентны:
auto foo(int parm){
...
auto f = [x,&y](int z) {..};
..
return foo(parm);
}
может быть выражен как
template<class X, class Y>
struct Closure {
X x; Y y;
auto operator()(int z) {..};
};
auto foo(int parm) {
...
auto f = Closure<decltype(x), decltype(y)&>{x,y};
...
return f(parm);
}
Может это преобразование всегда можно сделать? Если нет, есть ли пример, который может это продемонстрировать. Благодаря!
Да. Фактически, это по существу то, как определяются типы закрытия. –
Если бы не полиморфные лямбды, вы могли бы даже поставить «ручную лямбду» в область охвата. – melak47
Я не уверен, что я следую. Как вы это делаете? – eg0x20