boost事件处理类似于QT中的信号槽
conncet
#pragma warning(disable:4996)
#include<iostream>
#include<boost/signals2.hpp>
void func()
{
std::cout << "hello world" << std::endl;
}
int main()
{
boost::signals2::signal<void()>s;
s.connect(func);
s();
system("pause");
return 0;
}
通过connect为s添加槽函数func,通过调用s来调用func函数,通过模板来规定符合槽函数的函数签名为void()。
同样的例子也可以通过function来实现
#pragma warning(disable:4996)
#include<iostream>
#include<boost/signals2.hpp>
void func()
{
std::cout << "hello world" << std::endl;
}
int main()
{
boost::function<void()> f;
f = func;
f();
system("pause");
return 0;
}
boost::singnal2::signal还可以实现关联到多个槽函数
#pragma warning(disable:4996)
#include<iostream>
#include<boost/signals2.hpp>
void func1()
{
std::cout << "hello world" << std::endl;
}
void func2()
{
std::cout << "gt" << std::endl;
}
int main()
{
boost::signals2::signal<void()>s;
s.connect(func1);
s.connect(func2);
s();
system("pause");
return 0;
}
还可以通过指定槽函数的调用顺序
s.connect(1,func1);
s.connect(0,func2);
disconnect
可以通过disconnect来断开函数与信号的关联
s.connect(1,func1);
s.connect(0,func2);
s.disconnect(func1);
s.disconnect_all_slots();//断开所有的信号函数连接
std::cout << s.num_slots() << std::endl;//信号关联的函数个数
if (!s.empty())//信号关联的函数个数是否为空
s();