自己开发了一个股票软件,功能很强大,需要的点击下面的链接获取:
QStockView股票智能分析报警软件下载链接 - 一字千金 - 博客园
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 reconnectprintf("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