Re[2]: Boost.Bind и композиция функторов
От: adalekin Россия IT Rightway
Дата: 09.06.10 09:07
Оценка:
Здравствуйте, XuMuK, Вы писали:

XMK> отлично компилируется и работает как задумано: http://codepad.org/rka47j4d


Никто не сомневается, что bind компилируется и работает. Речь идет именно о композиции функторов.

Комментарий

// What do we really need:
// runner.run(boost::bind(f, "arg1", "arg2"), true)


показывает порядок функторов, который хочется иметь. Возможно, я недостаточно точно описал суть проблемы.

Есть wrapper, который вызывает функтор с двумя параметрами. Есть 2 функтора:

Если wrapper вызывает f:

boost::function<void (const std::string &, const std::string &)> f =\
    boost::bind(&h::handle, boost::ref(handler)
        , _1
        , _2);

wrapper(f);


все здорово и тривиально (как в описанном Вами примере). Однако сложность заключается в том, чтобы "обернуть" функтор f в функтор run.

boost::function<void (const std::string &, const std::string &)> f =\
    boost::bind(&h::handle, boost::ref(handler)
        , _1
        , _2);

    boost::function<void (const std::string &, const std::string &)> run =\
        boost::bind(&f_runner::run, boost::ref(runner)
         , boost::protect(boost::bind(f
                , _1
                , _2))    // evaluation of _1 and _2 is needed
        , true);
    
wrapper(run);
avalon 1.0rc2 rev 272
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.