Re[11]: вызов функций по указателю в for_each
От: Сыроежка  
Дата: 17.03.12 12:31
Оценка:
Здравствуйте, SCRABER, Вы писали:

SCR>За boost я схватился только из-за того, чтобы поставить себе цель не составляя дополнительного кода (в виде функциональных объектов) написать одной строкой.


Дело в том, что в отношении boost просто создается иллюзия, что вы пишите одной строкой. На самом деле вы включаете заголвочные файлы, где помещены оопределения множества типов и классов и конструкций, которые по объему значительно превосходят функциональный объект. К тому же не исключено, что вам еще помимо заголовков потребуется подключать библиотеки boost, что сделает ваш проект более громоздким.

SCR>В конце концов каждый должен знать несколько способов решений одной и той же задачи, чтобы в будущем уметь применить свой накопленный опыт.


Здесь я с вами полностью согласен, так как расширение кругозора идет только на пользу.

SCR>Как вы думаете что будет выигрывать по скорости работы лямбда-выражения или функциональный объект ???


Это сложный вопрос, на который я не в состоянии дать однозначный ответт. Так как коомпилятор на самом деле, фактически, за вас создает функциональный объект и может в него включать излишние вещи, как, например, оператор приведения типа к указателю на функцию для оператор-функции, который вам на самом деле в данной конкретной ситуации совсем не нужен.
Меня можно встретить на www.cpp.forum24.ru
Re[11]: вызов функций по указателю в for_each
От: Сыроежка  
Дата: 17.03.12 13:01
Оценка:
Здравствуйте, Ops, Вы писали:

Консервативность часто заканчивается реакционностью!
Вы даже не заметите, как развитие вашего проекта просто топчется на месте.
Меня можно встретить на www.cpp.forum24.ru
Re[11]: вызов функций по указателю в for_each
От: Сыроежка  
Дата: 17.03.12 14:02
Оценка:
Здравствуйте, SCRABER, Вы писали:

Кстати сказать, если вы хотите попробовать выполнить пример, который я предоставил, то можете воспользоваться онлайновым компилятором!

Только вам в моем примере надо исключить первый специфический заголовок компилятора Майкрософт, а функцию main объявить просто, как

int main()
Меня можно встретить на www.cpp.forum24.ru
Re[12]: вызов функций по указателю в for_each
От: SCRABER  
Дата: 17.03.12 16:49
Оценка:
Здравствуйте, Сыроежка, Вы писали:

С>Здравствуйте, SCRABER, Вы писали:


С>Кстати сказать, если вы хотите попробовать выполнить пример, который я предоставил, то можете воспользоваться онлайновым компилятором!


С>Только вам в моем примере надо исключить первый специфический заголовок компилятора Майкрософт, а функцию main объявить просто, как


С>int main()


Попробовал ваш код на VS 2011 все нормально компилируется.
Спасибо за совет. Буду поподробней изучать лямбда-выражения и их применимость в проектах.
Программер
Re[2]: вызов функций по указателю в for_each
От: Logot Украина  
Дата: 17.03.12 18:37
Оценка: 11 (2) +2
Здравствуйте, Сыроежка, Вы писали:

С>Вот простой пример, скомпилированный с помощью MS VC++ 2010. И мой вам совет на будущее, не используйте boost.


А вот вам мой совет! Не нужно указывать что и кому использовать, хорошим тоном будет предложить разные варианты решения задачи. Человек пусть сам выберет...
Re[2]: Mystery Solved!
От: lxa http://aliakseis.livejournal.com
Дата: 25.07.12 14:29
Оценка:
#include    <iostream>
#include    <list>
#include    <algorithm>
#include    <functional> 

using namespace std::placeholders;
using std::bind;

typedef void ( *pf )( int );

void f1( int x )
{
    std::cout << "f1( int )\n";
}

void f2( int x )
{
    std::cout << "f2( int )\n";
}

void f3( int x )
{
    std::cout << "f3( int )\n";
}


void fn( const std::list<pf> &l, int x )
{
    typedef std::pointer_to_unary_function<int, void> FuncObj;
    auto fun = bind(&FuncObj::operator(), bind<FuncObj>(std::ptr_fun<int, void>, _1), x);
    std::for_each(l.begin(), l.end(), fun);
}


int main(int argc, char* argv[])
{
    std::list<pf> l;
    l.push_back( f1 );
    l.push_back( f2 );
    l.push_back( f3 );
    fn( l, 10 );

    return 0;
}
Re[5]: вызов функций по указателю в for_each
От: IROV..  
Дата: 25.07.12 16:31
Оценка:
Здравствуйте, Сыроежка, Вы писали:

"Вот на новом С++ можно написать тоже самое и без буста, потомучто в нем уже встроены базовые лямбды", хрен придерешся
ну и желательно ответ на класическом С++



По поводу того что "не юзайте буст", с одной стороны да с другой нет.
Я например часто встречаю и симетричные случаи когда человек не зная про реализованые вещи в бусте пишет самопальный кривой код. На вопрос почему не буст? ответ, он страшный большой, долго работает и вообще мое компактней и лучше, а эти ошибки я скоро поправлю.

вот такая жизнь.

Ну а про уникомов которые знают буст но не знают С++ это отдельная ветка, кстати эти же люди не могут написать даже Модель для крестиков ноликов, а это уже реальный ппц.
я не волшебник, я только учусь!
Re[12]: вызов функций по указателю в for_each
От: jazzer Россия Skype: enerjazzer
Дата: 27.07.12 01:04
Оценка: :)
Здравствуйте, Сыроежка, Вы писали:

С>Здравствуйте, Ops, Вы писали:


С>Консервативность часто заканчивается реакционностью!

С>Вы даже не заметите, как развитие вашего проекта просто топчется на месте.

Из-за того, что компилятор не поддерживает лямбды
Причем это произошло ровно в день принятия нового стандарта.
Как проект развивался до этого — остается лишь догадываться
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: вызов функций по указателю в for_each
От: jazzer Россия Skype: enerjazzer
Дата: 27.07.12 01:11
Оценка: +1
Здравствуйте, SCRABER, Вы писали:

SCR>У меня вот это не компилируется ?????

SCR>Embarcadero C++ Builder XE2.

Юзай буст и не парься. Буст — это общий знаменатель для компиляторов (в смысле что новые фичи по возможности эмулируются и работают на старых компиляторах, например, BOOST_AUTO), плюс практически все, что было добавлено в стандартную библиотеку в новом стандарте, пришло именно из буста и было в нем доступно уже лет 10 как.
И со следующим стандартом так же будет ,скорее всего.
Так что, изучая буст, в каком-то смысле изучаешь будущий стандарт.

А Сыроежку ты слушай, делая скидку на то, что он Воин Стандарта.
По-сыроежкиному получается, что все эти 10 лет нужно было сосать лапу с убогой стандартной библиотекой С++98, лишь бы не буст.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Mystery Solved!
От: lxa http://aliakseis.livejournal.com
Дата: 01.08.12 16:04
Оценка:
Этот пример работает как с boost::bind, так и std::bind. Однако ptr_fun объявлена устаревшей. Найти похожее решение, работающее с boost и std без устаревших функций навскидку что-то не получается. Можно вместо ptr_fun забайндить сам bind, но в целом это не срабатывает. Похоже, это не имеет практического смысла, но все равно интересно было бы посмотреть на возможное решение ...
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.