博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++11 bind函数
阅读量:2193 次
发布时间:2019-05-02

本文共 1651 字,大约阅读时间需要 5 分钟。

bind函数可以看作是一个通用的函数适配器,它接受一个可调用对象,生成一个新的可调用对象来“适用”原对象的参数列表

调用bind的一般形式:auto newCallObject = bind(callObject, arg_list);
其中,newCallObject本是是一个可调用对象,arg_list是一个逗号分隔的参数列表,对应给定的callObject的参数,
即当我们调用newCallObject时,newCallObject会调用callObject,并将arg_list中的参数传给callObject。
如果arg_list里的参数包含_n的名字,其中n是一个整数,表过“占位符”,在调用newCallObject时需要将填写相应的参数,
_1为newCallObject的第一个参数,_2为newCallObject的第二个参数,以此类推。

下面来看来示例:

#include 
//std::cout#include
// std::binddouble my_divide(double x, double y) {return x / y;}class MyPair {public: double a, b; double multiply() {return a * b;}};int main(){ using namespace std::placeholders;//占位符空间 adds visibility of _1, _2, _3 //绑定普通函数 auto fn_five = std::bind(my_divide, 10, 2); std::cout << "fn_five()===" << fn_five() << std::endl; //绑定普通函数,需要传递一个参数,参数列表从左至右_1====>x auto fn_half = std::bind(my_divide, _1, 2); std::cout << "fn_half()===" << fn_half(10) << std::endl; //绑定普通函数,需要传递两个参数,参数列表从左至右_1====>x, _2===>y auto fn_invert = std::bind(my_divide, _2, _1); std::cout << "fn_invert()===" << fn_invert(10, 2) << std::endl; //绑定普通函数,需要传递两个参数,参数列表从左至右_1====>x, _2===>y 与填写顺序无关 auto fn_rounding = std::bind
(my_divide, _1, _2); std::cout << "fn_rounding()===" << fn_rounding(10, 3) << std::endl; MyPair ten_two {10, 2}; //绑定成员函数 auto bound_member_fn = std::bind(&MyPair::multiply, _1);//一个参数 std::cout << "bound_member_fn()===" << bound_member_fn(ten_two) << std::endl; //绑定数据成员 auto bound_member_data = std::bind(&MyPair::a, ten_two); std::cout << "bound_member_data()===" << bound_member_data() << std::endl; return 0;}

参考:

转载地址:http://ckiub.baihongyu.com/

你可能感兴趣的文章
【LEETCODE】190-Reverse Bits
查看>>
【LEETCODE】67-Add Binary
查看>>
【LEETCODE】7-Reverse Integer
查看>>
【LEETCODE】165-Compare Version Numbers
查看>>
【LEETCODE】299-Bulls and Cows
查看>>
【LEETCODE】223-Rectangle Area
查看>>
【LEETCODE】12-Integer to Roman
查看>>
【学习方法】如何分析源代码
查看>>
【LEETCODE】61- Rotate List [Python]
查看>>
【LEETCODE】143- Reorder List [Python]
查看>>
【LEETCODE】82- Remove Duplicates from Sorted List II [Python]
查看>>
【LEETCODE】86- Partition List [Python]
查看>>
【LEETCODE】147- Insertion Sort List [Python]
查看>>
【算法】- 动态规划的编织艺术
查看>>
用 TensorFlow 让你的机器人唱首原创给你听
查看>>
对比学习用 Keras 搭建 CNN RNN 等常用神经网络
查看>>
深度学习的主要应用举例
查看>>
word2vec 模型思想和代码实现
查看>>
怎样做情感分析
查看>>
用深度神经网络处理NER命名实体识别问题
查看>>