Bind函数详解
自己开发了一个股票软件,功能很强大,需要的点击下面的链接获取:
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
相关文章
- 虚函数详解[通俗易懂]
- win10安装wget,从此可以更快的下载文件 and windows10 下 zip命令行参数详解
- Oracle 大小写转换函数实例详解
- iOS开发实践之MD5加密详解手机开发
- MySQL server has gone away 问题详解程序员
- 2017 年最流行的 15 个数据科学 Python 库详解编程语言
- java常用字符串操作函数详解编程语言
- Scalaz(45)- concurrency :Task-函数式多线程编程核心配件详解编程语言
- MyBatis学习笔记(一)入门详解编程语言
- a标签默认颜色详解编程语言
- 弹出选择框函数汇总详解编程语言
- 介绍几个创建GUID的函数详解编程语言
- 数组的存储,C语言数组的存储实质详解
- C++ hash(STL hash)及其函数模板用法详解
- Python函数可变参数详解
- Java Object类详解:Object类的常用方法(equals()和getClass())
- Linux创建用户命令详解(linux命令 创建用户)
- MySQL中Check函数的用法详解(mysql中cheak)
- MySQLSTMT函数详解及使用方法(mysql_stmt())
- ThinkPHPCURD方法之field方法详解