Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, nen777w, Вы писали:
N>>но хочется разобраться со всеми этими if_then_else, switch_statment и т.п.
J>Тебе горит или просто интересуешься? Если просто — то дождись выхода третьего феникса: там будет все то же самое, но по-человечески сделанное.
нет не горит, просто интересуюсь, решил за 3-м заходом таки взять MPL
Здравствуйте, nen777w, Вы писали:
N>нет не горит, просто интересуюсь, решил за 3-м заходом таки взять MPL
давно пора
N>А что такое феникс?
феникс — это лямбда из спирита.
третья версия будет целиком на Boost.Proto и будет самостоятельной библиотекой (а не в составе спирита), в идеале заменящей и Boost.Bind, и Boost.Lambda.
On 07.05.2011 19:20, nen777w wrote:
> сам себе и отвечу посидел ещё раз над докой. оказывается всё достаточно просто: > > std::sort( v.begin(), v.end(), > ( bl::var(arr)[(&bl::_1 ->*&S::index)]< bl::var(arr)[(&bl::_2 ->*&S::index)] ) > );
Это по-твоему просто ?
Это по-твоему естественно ?
Здравствуйте, MasterZiv, Вы писали:
MZ>On 07.05.2011 19:20, nen777w wrote:
>> сам себе и отвечу посидел ещё раз над докой. оказывается всё достаточно просто: >> >> std::sort( v.begin(), v.end(), >> ( bl::var(arr)[(&bl::_1 ->*&S::index)]< bl::var(arr)[(&bl::_2 ->*&S::index)] ) >> );
MZ>Это по-твоему просто ? MZ>Это по-твоему естественно ?
MZ>По-моему так уродство.
это уже философский вопрос. на самом деле если не понимать синтаксис то выглядит конечно страшновато, но если немного почитать доку всё становится понятно.
Модераторам:
Сори за эти посты, просто как говорят — если хочешь запомнить поделись ещё с кем нибудь.
Я кидаю это потому как поиск здесь по boost::lambda дал ну очень мало и не сильно отличающееся от стандартной документации.
Более сложные приём использования этой офигенной библиотеки, думаю также будут полезны ещё кому-то.
Хотелось бы уйти от повторения: bl::var(axis_y)[bl::var(n)]
т.е. так: bl::_1 = bl::var(axis_x)[bl::var(n)]
по документации Я так понимаю это можно сделать и это работает для std::for_each() например, но для bl::for_loop() — это не работает:
error C2678: binary '=' : no operator found which takes a left-hand operand of type 'const boost::tuples::null_type'
пока не пойму почему, похоже нужно копать по исходникам в глубь библиотеки.
Я раньше думал, что использование лямбды должно упрощать код... Теперь в сомнениях...
Кроме того, что получилось в коде заюзать лямбду не детским образом, какие-нибудь дополнительные профиты это принесло?
N>>Офигительная штука!! Ух.
I>Я раньше думал, что использование лямбды должно упрощать код... Теперь в сомнениях...
На самом деле почитав документацию всё становится достаточно понятно, так что страшных закорючек бояться не стоит. Люди вот например как то же пишут на Perl-е а там синтаксис по круче будет.
I>Кроме того, что получилось в коде заюзать лямбду не детским образом, какие-нибудь дополнительные профиты это принесло?
Мне просто интересно разобраться было. Из профитов гм.. например если lambda использовать совместно с <algorithm> это позволит не писать отдельных функторов, делать их сразу по месту.
lambda — это способ объявить функциональный объект, т.е. объект ведущий себя как функция.
Пока Я вижу в этом их применение, но теперь наверняка со временем применяя её в той или иной ситуации можно будет постепенно расширить и способы её использования.
Может те кто давно в теме ещё что то подскажут.
nen777w:
I>>Я раньше думал, что использование лямбды должно упрощать код... Теперь в сомнениях... N>На самом деле почитав документацию всё становится достаточно понятно
Вот только понять, что делает нормальный читабельный код, можно гораздо быстрее. С поиском ошибки — если таковая возникла — аналогично.
I>>Кроме того, что получилось в коде заюзать лямбду не детским образом, какие-нибудь дополнительные профиты это принесло? N>Мне просто интересно разобраться было.
Вот-вот, из академического интереса побаловаться можно, но чтобы использовать на практике — ну на фиг такое счастье.
N>Из профитов гм.. например если lambda использовать совместно с <algorithm> это позволит не писать отдельных функторов, делать их сразу по месту.
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, nen777w, Вы писали:
N>>lambda рулит!!!
N>>Офигительная штука!! Ух.
NB>ты эту офигительную штуку на производительность не тестировал?
а зачем? В документации по boost::lambda и так видно что существует небольшое падение производительнсти по сравнению с самописными функторами.
Но мне это не критично, когда допишу полный алгоритм тогда и потестирую.
Здравствуйте, nen777w, Вы писали:
N>>>lambda рулит!!!
N>>>Офигительная штука!! Ух.
NB>>ты эту офигительную штуку на производительность не тестировал? N>а зачем? В документации по boost::lambda и так видно что существует небольшое падение производительнсти по сравнению с самописными функторами.
цифры в доках не смотри, они не обновлялась хз сколько лет.
N>Но мне это не критично, когда допишу полный алгоритм тогда и потестирую.
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, nen777w, Вы писали:
N>>Более сложные приём использования этой офигенной библиотеки, думаю также будут полезны ещё кому-то. __>+1 __>А может просто убедите начальство переходить на GCC 4.5 / VS 2010 а там и нормальные лямбды есть
А это не для начальства. Это для себя.
А то что на работе... еле с 6-ки (сколько на мозги капал) переползли на 2008-ю... и то немецкую версию подсунули