- 1
- 2
- 3
- 4
auto L = [](int i)->int { return i+1; };
typedef decltype(L) TL;
auto lfunc = &TL::operator();
int i = (L.*lfunc)(1);
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+153
auto L = [](int i)->int { return i+1; };
typedef decltype(L) TL;
auto lfunc = &TL::operator();
int i = (L.*lfunc)(1);
http://ideone.com/t67as
http://ideone.com/3V0h9
http://ideone.com/bjPuR
http://ideone.com/fYY6p
Стандарт как всегда отжигает..
автор чего?
И какие же? (:
В С++ или вообще?
http://govnokod.ru/8128
(:
в таких случаях говорят, нужно оптимизировать алгоритм
Предчувствую море дебаго-боли с чем-то вроде:
"segfault at function functional::blabla<functional::lambda<ra ndom_crap::randomshit>, context::iter, func::<another_random stuff>>"
Везде с этим всё хорошо. (:
*что у лямбд в С++ с управлением памятью?
Лямбды в С++? Не. Не видел. (:
Это детский сад, а не лямбды. Просто не именованные функции с простейшими замыканиями. Этакая поделка в стиле аля страус труп.
И уж тем более понятно, что как и во всем С++, управление памятью там ручное.
А в ногу выстрелить есть множество других способов.
fixed
Не могу придумать пользы тогда вообще.
Лямбды полезны тем, что они замыкают свой контекст, и кидаются в другой контекст, позволяя их связывать между собой (характерный пример -- event-driven programming).
Ежли в С++ они используются там же, где и определены (из того же контекста)... То иного смысла их включать в язык нежели как быть "edgy" на волне моды на функциональщину, не вижу.
Аналогично с указателями/ссылками на локальные переменные. Можете их передавать и использовать, пока контекст, в котором они созданы, не умер. Так что ничего нового и неочевидного в плане наступить на грабли не появилось.
Ну и лямбды, не являющиеся замыканиями, думаю, можно использовать шире.
Ну это было всегда решаемо метапрограммированием, например. Или интерфейсами (скажем ISortable + ссылка на виртуальный метод и т.д.)
Избыточность какая-то.
Скорее segfault at address (: