bind
1
2
3
4
5
6
7
8
9
10
11
绑定函数参数到一个函数对象上(参数可以使用占位符),并返回一个函数对象
using namespace std::placeholders; //为了能使用 _1, _2, _3 进行占位,表示这个参数以调用时传入的参数为准
bind (Fn&& fn, Args&&... args); //参数fn也是一个函数对象
还可以指定执行结果的返回类型: std::bind<int> (my_divide,_1,_2);
std::bind(&callback);
std::bind(&aClass::callback, this);//绑定成员函数时第2个参数为对象地址
std::bind(&aClass::callback, this, info);
function
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
std::function<返回值(参数)>
可以使用lambda赋值,
另外std::bind绑定后的结果可以使用std::function保存,但需要注意参数类型:
void print_num(int i)
{
std::cout << i << '\n';
}
std::function<void()> f_display_31337 = std::bind(print_num, 31337);
f_display_31337(); //原来是有int参数的,经过bind后,不需要参数了。
为了方便使用,常用以下形式
using target = std::function<bool(QObject* obj)>;
然后可以用target声明变量
target m_target = nullptr;
m_target = std:bind(xxx);
使用
1
2
3
4
auto lambdaSendMessage = [this](int id)
{
}
connect(hotkey2, &QHotkey::activated, std::bind(lambdaSendMessage, 2)); //connect的第三个参数是一个函数对象,可以用bind返回一个函数对象。
参考
https://www.cplusplus.com/reference/functional/bind/
https://en.cppreference.com/w/cpp/utility/functional/function
https://blog.csdn.net/wangshubo1989/article/details/49134235
欢迎评论交流