boost :: сигналов довольно гибкий, когда дело доходит до того, что вы связываете с сигналом. Вы можете использовать объект функции, но вы также можете просто использовать указатель на функцию или использовать boost :: bind, чтобы превратить практически любую функцию в объект функции. Вот как может выглядеть ваш пример, хотя могут быть и лучшие способы.
#include <boost/signals.hpp>
class Notifier
{
public:
boost::signal< void() > NodulesChanged;
void ChangeNodules()
{
//Just call the signal and all connected slots will be called.
NodulesChanged();
}
};
Чтобы добавить обратный вызов, вы можете просто
void callback1()
{
//do callback stuff
}
void callback2()
{
//do callback stuff
}
int main()
{
Notifier n;
n.NodulesChanged.connect(&callback1);
n.NodulesChanged.connect(&callback2);
//calls callback1 & 2.
n.ChangeNodules();
}
Если вы хотите подключить функцию-член с аргументами в качестве слота, вы можете сделать что-то вроде этого:
class Notifier
{
public:
boost::signal< void ( double ) > ProgressSignal;
};
class OtherClass
{
public:
void UpdateProgress(double pct);
};
int main()
{
Notifier n;
OtherClass oc;
n.ProgressSignal.connect(boost::bind(&OtherClass::UpdateProgress, &oc, _1));
//Calls oc.UpdateProgress(0);
n.ProgressSignal(0);
}
Предупреждение: ничего из этого не было скомпилировано или протестировано.