До версии 5.5.4 включительно пользователю всегда нужно было определять свое сообщение. Даже если он в нем передает всего одно единственное поле. Что не удобно при написании мелких программ на выброс (в том числе и программ, которые используются для сравнения SO с другими фреймворками).
Похоже, избежать этого можно за счет вот такого простого фокуса:
Используются такие сообщения в точности как обычные:
// Отсылка:so_5::send<process_range>(channel,start,last);so_5::send<found>(channel,pw);// Получение и использование:coop->define_agent().event(channel,[channel,hash](constprocess_range&evt){worker(channel,hash,std::get<0>(evt),std::get<1>(evt));},so_5::thread_safe);coop->define_agent().event(channel,[&env](constfound&evt){cout<<"password: "<<std::get<0>(evt)<<endl;env.stop();});
Ну и просто для сравнения объема:
// Существующий вариант, который рекомендуется для больших проектов:structprocess_range:publicso_5::rt::message_t{constpasswordm_start;constpasswordm_end;process_range(constpassword&start,constpassword&end):m_start(start),m_end(end){}};structfound:publicso_5::rt::message_t{constpasswordm_result;found(constpassword&result):m_result(result){}};// ---// Вариант с tagged_tuple_msg:usingprocess_range=tagged_tuple_msg<std::integral_constant<int,0>,password,password>;usingfound=tagged_tuple_msg<std::integral_constant<int,1>,password>;
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
До версии 5.5.4 включительно пользователю всегда нужно было определять свое сообщение. Даже если он в нем передает всего одно единственное поле. Что не удобно при написании мелких программ на выброс (в том числе и программ, которые используются для сравнения SO с другими фреймворками).
Похоже, избежать этого можно за счет вот такого простого фокуса:
Что позволяет определять простые сообщения одним из двух нижеследующих способов. Первый, требует дополнительного пользовательского типа:
Второй вообще позволяет обойтись однострочником за счет
std::integral_constant
:Используются такие сообщения в точности как обычные:
Ну и просто для сравнения объема:
Блин, во что превращается SO5 и программы на нем... Просто страшно подумать :)))
Last edit: Yauheni Akhotnikau 2015-04-11
После появления tuple_as_message_t и mtag нужно бы сделать возможнось писать так:
Вроде как есть возможность использовать std::tuple при вызове функции. Но нужно придумать, как встроить все это в уже существующие механизмы подписки событий в SO-5.
Last edit: Yauheni Akhotnikau 2015-04-11