首页 > 作文

C++11标准库bind函数应用教程

更新时间:2023-04-04 02:49:13 阅读: 评论:0

目录
新学期家长寄语简短bind 是什么?举个栗子1. bind 无参数的普通函数2. bind 1个参数的普通函数3. bind 多个参数的普通函数4. bind 多个参数的普通函数并打乱参数位置5. bind 类的成员函数再举个应用栗子

bind 是什么?

bind 顾名思义: 绑定

通俗来讲呢,可以这么理解有点像函数指针的意思。

资料上是这么讲的:可以将 bind 函数看做一个通用函数的适配器,它接受一个可调用对象,生成一个新的可以调用对象来“适应”原对象参数列表

它一般调用形式:

// 其中 newcallable 是一个可调用的对象, arg_list 是以逗号分隔的参数列表// 这时我们调用 newcallable,newcallable 就会调用 callable, 并用 arg_list 传递参数auto newcallable = bind(callable, arg_list);

好了,重点在于 arg_list 里,那么我们如何传入参数呢

它们是靠这些参数的位置来识别的,形如 _n 之类的, n 是整形, _1 是第一个参数,_2是第二个参数,以此类推。

而名字 _n 是定义在 placeholders 命名空间中, 而 placeholders 本身又定义在 std 命名空间中, 所以形如:河北高中

using std:: placeholders::_1

接下来,我们举例几个列子

举个栗子

bind 是在头文件 #include <functional> 中,元旦 英文 首先要包含它。

1. bind 无参数的普通函数

#include <iostream>#include <functional> // 包含此头文件// 普通函数void fun(){std::cout << "i am fun!" << std::endl;}// 主函数int main(){auto fun = std::bind(fun); // 适配 fun 函数并返回一个可调用的对象fun();return 0;}

调试结果:

2. bind 1个参数的普通函数

#include <iostream>#include <functional> // 包含此头文件// 普通函数void fun(int a){std::cout << "i am fun! a = " << a <<std::endl;}// 主函数int main(){auto fun = std::bind(fun, std::placeholders::_1); fun(5);return 0;}

调试结果:

3. bind 多个参数的普通函数

#include <iostream>#include <functional> // 包含此头文件// 普通函数int fun(int a, int b){return a - b;}// 主函数int main(){auto fun = std::bind(fun, std::placeholders::_1, std::placeholders::_2); std::cout << fun(5, 2) << std::endl;return 0;}

调试结果:

4. bind 多个参数的普通函数并打乱参数位置

#include <iostream>#include <functional> // 包含此头文件// 普通函数int fun(int a, int b){return a - b;}// 主函数int main(){auto fun1 = std::bind(fun, std::placeholders::_1, std::placeholders::_2);auto fun2 = std::bind(fun, std::placeholders::_2, std::placeholders::_1);std::cout << fun1(5, 2) << std::endl;std::cout << fun1(5, 2) << std::endl;return 0;}

调试结果:

5. bind 类的成员函数

#include <iostream>#include <functional> // 包含此头文件class myclass {public:myclass() {}~myclass() {}public:void printinfo() {std::cout << "myclass info." << std::endl;}};// 主函数int main(){myclass a;auto fun = std::bind(&myclass::printinfo, a);fun();return 0;}

调试结果:

再举个应用栗子

#include <iostream>#include <functional> // 包含此头文件typedef std::functi小学三年级英语试卷分析on<void(int)> callbacktype;// a 类class myclassa {public:void regeditcallback(callbacktype fun){ _callback_fun = fun; }void printinfoa(int d) { _callback_fun(d); }private:callbacktyp最好听的男孩名字e _callback_fun;};// b 类class myclassb {public:void printinfob(int d) {std::cout << d << std::endl;}};// 主函数int main(){myclassb b;auto funb = std::bind(&myclassb::printinfob, b, std::placeholders::_1);myclassa a;a.regeditcallback(funb);a.printinfoa(1);return 0;}

调试结果:

到此这篇关于c++11标准库bind函数应用教程的文章就介绍到这了,更多相关c++11 bind函数内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 02:49:12,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/04cd6a64ef4c0929a481d7c2b22af9f0.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:C++11标准库bind函数应用教程.doc

本文 PDF 下载地址:C++11标准库bind函数应用教程.pdf

标签:函数   参数   头文件   多个
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图