boost库signals2简介

bind简介

bind可以用来绑定函数指针、函数引用、成员函数指针和函数对象等的参数。
bind接收第一个参数为可调用对象f,之后bind最多可接受9个参数,且参数数量与f的参数数量一致。

  • 绑定普通函数

    1
    2
    3
    int f(int a,int b){return a+b;}
    bind(f,_1,9)(3); // 固定第二个参数,等价于f(3,9)
    bind(f,9,_1)(3); // 固定第二个参数,等价于f(9,3)
  • 绑定成员函数

    1
    2
    3
    4
    struct demo{void func(int a,int b){return a+b;}};
    demo x;
    bind(&demo::func,x,_1,9)(3);
    bind(&demo::func,x,9,_1)(3);

signals2简介

signals2实现了线程安全的回调机制,一个signal可以关联多个slot,当signal发出时,所有关联的slot会被调用。

实例简介

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <boost\signals2.hpp>	// signals2头文件
#include <boost\bind.hpp> // bind头文件
#include <iostream>

using namespace std;

struct Object
{
int func(int a, int b)
{
return a + b;
}
};

void main()
{
// 创建实例
Object* obj = new Object;

// 创建signal
// boost::signals2::signal<返回值(参数1,参数2,...)> sig;
boost::signals2::signal<int(int, int)> sig;

// 连接signal
boost::signals2::connection con = sig.connect(boost::bind(&Object::func, obj, _1, _2));

// 获取返回值
cout << *sig(111, 222) << endl;
system("pause");
}

参考:

[1].https://www.boost.org/doc/libs/1_69_0/doc/html/signals2/tutorial.html#id-1.3.37.4.2

坚持原创技术分享,您的支持将鼓励我继续创作!