Если уж идти по пути использования C++ных lambda-функций в SObjectizer на полную катушку, то почему бы не разрешить объявлять в качестве агента лямбду? Без необходимости писать класс агента, писать для него конструктор, переопределять виртуальные методы и пр.
В текущем варианте новой версии 5.3 в примере синхронного взаимодействия агентов parallel_sum есть один агентик, который сейчас определяется вот так:
class a_part_summator_t : public so_5::rt::agent_t { public : a_part_summator_t( so_5::rt::so_environment_t & env, const so_5::rt::mbox_ref_t & self_mbox ) : so_5::rt::agent_t( env ) , m_self_mbox( self_mbox ) {} virtual void so_define_agent() { so_subscribe( m_self_mbox ).event( []( const msg_sum_part & part ) { return std::accumulate( part.m_begin, part.m_end, 0 ); } ); } private : const so_5::rt::mbox_ref_t m_self_mbox; }; |
Хотя можно было бы свести его вот к такому:
coop->define_agent( mbox, []( const msg_sum_part & part ) { return std::accumulate( part.m_begin, part.m_end, 0 ); } ); |
Первые выглядящие действительно реальными наметки зафиксировал вот здесь. Если кому-то интересно, то подключайтесь к обсуждению.
Комментариев нет:
Отправить комментарий