sigc::slot boost::??
От: Petrovich_  
Дата: 17.07.11 07:15
Оценка:
Добрый день.
В данный момент занят переводом довольно большого объема кода с sigc на boost.
И если сигналы перешли относительно безболезненно, то со слотами возникли некоторые вопросы.
В целом проблемы решены, но терзают меня смутные сомненья, что оптимально.
Итак:
sigc::slot становится boost::function, sigc::bind соответсвтенно boost::bind.
Проблема первая:
Пустые boost::function бросают эксепшен, sigc::slot возвращает чего-то, повидимому return_value().
Решил инициализацией функций в виде (boost::lambda::do_nothing_action(), return_value());
Проблема вторая:
sigc::bind_return, т.е. надо забиндитить вызов функции, а возвращать что-то другое, в моем случае это всегда константы.
Решение ((boost::lambda::bind(function),return_value()))
И последнее, уж не помню зачем, но понадобилося мне предикат, который просто возвращал бы обратно переданное ему значение.
Т.е. что-то реализующее.
T operator(const &T){return T;}
Вопрос скорее уже академического плана, но как лучше реализовать такое средствами stl/boost.
В голову приходит мысль забиндить value | 0, но не у всех value может быть operator |.
Re: sigc::slot boost::??
От: jerry_ru  
Дата: 17.07.11 19:00
Оценка: 1 (1)
Здравствуйте, Petrovich_, Вы писали:

Для работы с сигнал/слотами посмотрите boost::signals.

P_>И последнее, уж не помню зачем, но понадобилося мне предикат, который просто возвращал бы обратно переданное ему значение.

Не совсем понятно — предикат возвращает булево значение, а вам повидимому надо биднить что-угодно. Такую штуку легче написать самому, а из реализованного — boost::phoenix::val.
Re[2]: sigc::slot boost::??
От: Petrovich_  
Дата: 17.07.11 19:43
Оценка:
Здравствуйте, jerry_ru, Вы писали:

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


_>Для работы с сигнал/слотами посмотрите boost::signals.

Уже

P_>>И последнее, уж не помню зачем, но понадобилося мне предикат, который просто возвращал бы обратно переданное ему значение.

_>Не совсем понятно — предикат возвращает булево значение, а вам повидимому надо биднить что-угодно. Такую штуку легче написать самому, а из реализованного — boost::phoenix::val.
Да, ошибся, мне надо unary_function а не предикат. Спасибо.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.