Кресты / Говнокод #8129 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
auto L = [](int i)->int { return i+1; };
typedef decltype(L) TL;
auto lfunc = &TL::operator();
int i = (L.*lfunc)(1);

Запостил: ohlol ohlol, (Updated )

Комментарии (36) RSS

  • Не знаю почему, но мне вспомнился анекдот про даму с сумочкой, кошелочкой и кошелечком.
    Ответить
    • этот?
      Суд.
      -Подсудимый, за что Вы убили женщину?
      -Еду я в автобусе, подходит кондуктор к женщине, с требованием купить билет.
       Женщина открыла сумочку, достала кошелочку, закрыла сумочку, открыла кошелочку, 
      достала кошелек, закрыла кошелочку, открыла сумочку, положила туда кошелочку, 
      закрыла сумочку, открыла кошелек, достала деньги, открыла сумочку, достала кошелочку,
       закрыла сумочку, открыла кошелочку, положила туда кошелек, закрыла кошелочку, 
      открыла сумочку, положила туда кошелочку.
      - И что?
      - Контролер ей дал билет. Женщина открыла сумочку, достала кошелочку, закрыла сумочку, 
      открыла кошелочку, достала кошелек, закрыла кошелочку, открыла сумочку,
       положила туда кошелочку, закрыла сумочку, открыла кошелек положила туда билет, 
      закрыла кошелек, открыла сумочку, достала кошелочку, закрыла сумочку, 
      открыла кошелочку, положила туда кошелек, закрыла кошелочку, открыла сумочку, 
      положила туда кошелочку, закрыла сумочку. 
      «Возьмите сдачу», раздался голос контролера. Женщина… открыла сумочку…
      - Да убить ее за это мало, - не выдерживает прокурор.
      - Так я это и сделал :))
      Ответить
    • Это не решение, это синтетика. Заменить ++i; эквивалентным нечитабельным кодом на миллион строк можно было и без нового стандарта...
      Ответить
  • Вот интересно, а что у лямбд с управлением памятью? Ведь по идее лямбды пригодны только в средах со сборщиком мусора, ибо напр. непонятно что делать с контекстом замыкания, он может удалиться до вызова, или во время, самой лямбды. Подсчёт ссылок нередко ведёт к зацикливанию, т.к. часто объект держит ссылку на лямбду, и лямбла держит ссылку на объект. Да и сами лямбды предназначены, чтобы кидаться ими в разные места, в которых непонятно дальше что будет с управлением памяти.

    Предчувствую море дебаго-боли с чем-то вроде:

    "segfault at function functional::blabla<functional::lambda<ra ndom_crap::randomshit>, context::iter, func::<another_random stuff>>"
    Ответить
    • >что у лямбд с управлением памятью?
      Везде с этим всё хорошо. (:

      *что у лямбд в С++ с управлением памятью?
      Лямбды в С++? Не. Не видел. (:
      Это детский сад, а не лямбды. Просто не именованные функции с простейшими замыканиями. Этакая поделка в стиле аля страус труп.
      И уж тем более понятно, что как и во всем С++, управление памятью там ручное.
      Ответить
    • Лямбды C++ предназначены для использования там, где контекст не удалится до вызова. Если нужно иное — пишите явно класс-функтор с умными указателями и подсчётом ссылок.

      А в ногу выстрелить есть множество других способов.
      Ответить
      • *Всё в C++ предназначено для использования там, где контекст не удалится до вызова
        fixed
        Ответить
      • >Лямбды C++ предназначены для использования там, где контекст не удалится до вызова
        Не могу придумать пользы тогда вообще.

        Лямбды полезны тем, что они замыкают свой контекст, и кидаются в другой контекст, позволяя их связывать между собой (характерный пример -- event-driven programming).

        Ежли в С++ они используются там же, где и определены (из того же контекста)... То иного смысла их включать в язык нежели как быть "edgy" на волне моды на функциональщину, не вижу.
        Ответить
        • Замыкания можно использовать в контекстах уровнем ниже, пока тот, в котором их создали, живой. Например, передать как аргумент в функцию сортировки.

          Аналогично с указателями/ссылками на локальные переменные. Можете их передавать и использовать, пока контекст, в котором они созданы, не умер. Так что ничего нового и неочевидного в плане наступить на грабли не появилось.

          Ну и лямбды, не являющиеся замыканиями, думаю, можно использовать шире.
          Ответить
          • > Например, передать как аргумент в функцию сортировки
            Ну это было всегда решаемо метапрограммированием, например. Или интерфейсами (скажем ISortable + ссылка на виртуальный метод и т.д.)
            Избыточность какая-то.
            Ответить
  • г"O)D:H.T"NTK(O.X(Q.N(U:B?V:SB$S,H,L.AY:E,D,I(ABG(O)WU:T)I.O.T.P?J$U(B(W$Q:W!Q.W$I W(V:A:O:M)QT"X!M"E$YV!S(A?J"E!K,I)K$I"Q?O"H R?N:O.F?A(M$O?N)RP:K"U)F,A"C(F?V?X$V?T.U:U?I)O?N"F"H,E,BZ Y?Q,M.IJN B"N C$A$F(C$LQ,J:V$C.S(B,X(X$O.G"V$W?S!Q)C)P?G A:L?A OUM:Y!VT(K$S$P:Y QR"D,T F:Y.MG I.E)Z$C"V?I!L"N(I:L.S!S,Q,C(P"T?S"Y?QN)S!E"R,J C!I.O!K$DM?B.U:K!W$SO:F.F:I$A!R,M F)N!M(B)B"M,P!Z?J?J(H,U?G.H,O,Y"H,FC"L?T!BT!FS"R(Q,Q"B?G"A$U$C$M U.Z,V"X!N?B!E,O?O)N,L:BC!B:N,A.D L)B)P!A.A:N GDM A(K"U(B?J D,D.X:N$M.C.J,K"I,F$E:X S)Y:O$H)U$V,K!H"X P$R!P(N"V?G?D?K OET,YL,F:MP N!E(L)B"K"CY!B$O"D(S:S(N)S:C"X,P,L,W"E"S V$X,W:R$G"H?N!BJ?V Q.S Z R B.B,N$D:V:H$D K"R?LH.V,A:H:H?X!J?O)F$T$T X.H,D.S)G,O.L X.V:Q"Y(MM"P.P.O"O?V.X,N!F$O(P.B!T!R?V"I$N"J$I H!R:A"H(D L(T,K?SK,M$R$O$R"B G.X$PO C.Y.KY$J.T)F)I?S)P!B U"I(X.A!D.V"A$E)D(F(A U,N!V.H:E!S R(C(Y.W?A(H$H?U Z.V J)N A$R!YM,L"H?G!F!C XHJ!N!C$D$O:OY:N.R,O?X?N:L Q(ZP V,G A(H?Z!G)XO"C,V,Q.K!U$IK(L,L"Z)AM!U"W!X"O(J$L U$K(I.AX"Y.F$QТSUHAPUSCFSTPVOGLBKMHRZJRDBTXMBYVRJNTGLJXQWPQHZSGZFGIWHEDGWZAYIXBOIMUEIZQQPVCWVHMVXIDMMPFZUPJYWTHKEXUSEGBSAKAAXTCHUDFMWDWSIVGTRIDOTJGPVOQBJQIJGSCRBLVVYBHPLHTWUEOBNTYSHBSMDNMBMWHFCFDYQKTAJHEVSUFDAUDIAYGDSQUWSYYVKVTSZSYAPNISZQFRCVZQKXOFOBUYOPYNRHLEHSROFRGPGRBMALBHROIQMW
    Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8