Boost :: signal2 — передача сигнального слота в качестве аргумента

Я использую boost :: signal2 для создания класса, который использует сигнал для запуска события в определенных условиях. Этот класс имеет метод, который называется: RegisterCallback.

Эта функция должна принимать параметр типа слота, который использует сигнал (который недействительным тип возврата с двойной как единственный аргумент).

Однако я не совсем уверен, как мне определить этот аргумент в сигнатуре метода, поскольку исходный файл для класса signal1 для меня совершенно нечитабелен.

Поэтому я в основном хочу сделать это:

myTimer(interval);
myTimer.RegisterCallback(&aCallbackFunction);

Вот членский сигнал:

boost::signals2::signal<void (double)> m_signal;

… и вот метод регистрации, который мне нужен (незавершенный)

   /**
* Register a callback function that will be called when the timer interval elapses.
*/
void RegisterCallback(const boost::signals2::signal1<???????> &slot)
{
m_signal.connect(slot);
}

1

Решение

Вы также можете использовать библиотеку boost :: function и boost :: bind, я думаю.

typedef booost::signals2::signal(void (double)>::slot_type CallbackSlot
void RegisterCallback(CallbackSlot slot)
{
m_signal.connect(slot);
}

// ...

class MyClass {void handler(double);}

// ...

RegisterCallback(boost::bind(MyClass::handler, this, _1));

Я предлагаю вам также прочитать документацию boost :: function и boost :: bind, чтобы правильно использовать signal2. Этот пример кода не протестирован, но содержит все необходимое для решения вашей проблемы.

3

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

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

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