Как использовать Boost.Signals2 connect_extended?

У меня есть рабочий 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

Спасибо

0

Решение

Единственное преимущество 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);
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector