Я использую 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);
}
Вы также можете использовать библиотеку 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. Этот пример кода не протестирован, но содержит все необходимое для решения вашей проблемы.
Других решений пока нет …