自己开发了一个股票软件,功能很强大,需要的点击下面的链接获取:
https://www.cnblogs.com/bclshuai/p/11380657.html
Bind函数详解
目录
1 简介... 1
2 使用实例... 1
2.1 bind函数常规使用... 1
2.2 bind函数和thread线程函数... 3
3 原理解析... 4
3.1 一般函数绑定... 4
3.2 成员函数绑定... 5
3.3 Bind函数如何改变入参的顺序... 5
1 简介
bind函数的作用是通过绑定一个其他func函数生成一个依赖于func的新的函数对象,复用func函数的实现,但是可以改变这个func的参数数量和顺序,可以绑定普通函数、全局函数,静态函数,成员函数,而且其参数可以支持占位符(std::placeholders::_1,std::placeholders::_2)来改变参数的顺序,并且可以设置func中默认的几个参数来减少输入参数的数量。
2 使用实例
2.1 bind函数常规使用
// BindTest.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <functional> #include <iostream> using namespace std; int add(int a, int b) { printf("normal function:%d+%d=",a,b ); return a + b; } class addClass { public: int add(int a, int b) { printf("member function:%d+%d=", a, b); return a + b; }; int extraAdd(int a, int b) { //printf("member extraAdd function:%d+%d=", a, b); auto classpointadd = std::bind(&addClass::add, this,a,b); return classpointadd(); }; }; int main() { //绑定静态函数 auto fadd = std::bind(add, std::placeholders::_1, 4); cout<<fadd(2) << endl; //绑定成员函数,第一个参数需要是对象 addClass addobject; auto classadd = std::bind(&addClass::add, addobject, std::placeholders::_1, 3); cout <<classadd(2) << endl; //绑定成员函数,第一个参数也可以是指针 auto classpointadd = std::bind(&addClass::add, &addobject, std::placeholders::_1, 2); cout << classpointadd(2) << endl; //也可以在类的成员函数内部绑定成员函数,并且传递this指针 cout << addobject.extraAdd(1, 4) << endl; //占位符改变参数顺序 auto changeOrder= std::bind(&addClass::add, addobject, std::placeholders::_2, std::placeholders::_1); cout << changeOrder(1,2) << endl;//输入参数1,2,在add中参数变成2,1. getchar(); return 0; }
输出结果
2.2 bind函数和thread线程函数
// BindTest.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include <functional> #include <iostream> #include <thread> using namespace std; class threadBind { public: void StartThread() { m_ReconnectThread = std::move(thread(std::bind(&threadBind::Reconnect, this))); } void Reconnect() { while (true) { //do reconnect printf("thread func run\n"); break; } }; private: std::thread m_ReconnectThread; }; int main() { //线程函数绑定 threadBind thr; thr.StartThread(); getchar(); return 0; }
输出结果
3 原理解析
3.1 一般函数绑定
Bind函数绑定函数时,会创建一个新的操作对象,对象内部有指向函数的指针和参数变量保存默认的参数。
3.2 成员函数绑定
绑定成员函数时,需要传入对象的指针,不然bind找不到是调用哪个对象的成员函数。
3.3 Bind函数如何改变入参的顺序
参数输入函数时,默认是从左到右的顺序,通过bind和占位符的顺序,可以改变输入参数的输入顺序。
//占位符改变参数顺序
auto changeOrder= std::bind(&addClass::add, addobject, std::placeholders::_2, std::placeholders::_1);
参考文献
https://www.cnblogs.com/xusd-null/p/3698969.html
https://www.cnblogs.com/jerry-fuyi/p/12633621.html
https://blog.csdn.net/u013654125/article/details/100140328