У меня есть рабочий Boost.Signals2 signal
& slot
комбинация в моем проекте C ++ & настроить так;
//DECLARE SIGNAL
signals2::signal<void (const EN_DATA_STREAM, long, double, double, double, double, double)> signal;
//CONNECT DATAUPDATE() OF CANDIDATE INSTANCE
signal.connect(bind(&Candidate::DataUpdate, candidateInstance, _1, _2, _3, _4, _5, _6, _7));
//FIRE SIGNAL
signal(iDataNumber, BarNumber(), DateTime(), Open(), High(), Low(), Close());
Я пытался пойти дальше и использовать boost.signals2
connect_extended
функциональность, как я хотел бы передать детали вызова signal
к slot
таким образом slot
может отключиться от signal
в более позднее время. Синтаксис этого ускользает от меня. Пожалуйста, кто-то может продемонстрировать, как преобразовать приведенный выше код, чтобы он использовал connect_extended
передать информацию о соединении slot
,
Постскриптум Я смотрел на этот пример, представленный на веб-сайте Boost, но до сих пор не знаю, как адаптировать его к моим требованиям, когда используются параметры bind
,
Пример Boost.Signals2 connect_extended
Спасибо
Единственное преимущество connect_extended
является то, что это позволяет слоту получать connection
объект, который может иметь решающее значение в многопоточной программе, где вызов слота может произойти в другом потоке раньше connect_extended
возвращается. Вы не должны connect_extended
передавать любую другую информацию, так как вы можете связать ее напрямую. Во всяком случае, вот как вы можете сделать это с connect_extended
:
#include <boost/signals2.hpp>
using namespace boost::signals2;
void your_slot(connection conn, int, double, int, char)
{
}
int main()
{
signal<void(int, double, int)> your_signal;
your_signal.connect_extended(boost::bind(&your_slot, _1, _2, _3, _4, 'a'));
your_signal(1, 2.0, 3);
}
Других решений пока нет …