博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
lambda,std::function, 函数对象,bind的使用备忘
阅读量:5139 次
发布时间:2019-06-13

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

Demo备忘,占坑

#include 
#include
#include
using namespace std;using namespace std::placeholders;const static int T_NUM = 10;bool test_functional(const std::function
&f, int t) { return f(t);}struct test_struct{ public: bool operator()(int t) { if (t > T_NUM) { buffer.push_back(t); } return true; } public: std::vector
buffer;};int test_binder_functional(int a, int b) { return a+b;}int test_binder_function2(int &a) { return ++a;}class BindTestClass { public: BindTestClass(std::string name="") : name_(name) {} void Print(std::string prefix="") { std::cout << prefix << " " << name_ << std::endl;} private: std::string name_ {""};};int main(){ //函数对象 test_struct t; test_functional(t,9); test_functional(t,10); test_functional(t,11); test_functional(t,12); //打印不出任何东西,函数对象到 std::function存在隐式转换 for(auto it=t.buffer.begin(); it != t.buffer.end(); it++) { std::cout << *it << std::endl; } //------------------------------- // lambda std::vector
buffer; std::function
test_f = [&buffer](int t)->bool { if (t > T_NUM) { buffer.push_back(t); } }; test_functional(test_f,9); test_functional(test_f,10); test_functional(test_f,11); test_functional(test_f,12); // 打印 11,12 for(auto it=buffer.begin(); it != buffer.end(); it++) { std::cout << *it << std::endl; } //-------------------------------- // bind的使用 // bind 固定某个参数 auto bind_test_f = std::bind(test_binder_functional,_1,10); std::cout << bind_test_f(10) << std::endl; // bind auto divide_f = std::bind(std::divides
(), _1, 7); std::cout << divide_f(49) << std::endl; // nesting bind 嵌套bind auto time3_f = std::bind(std::multiplies
(), _1, std::bind(std::multiplies
(),_1,_1)); std::cout << time3_f(10) << std::endl; std::cout << time3_f(20) << std::endl; // bind_num_v will not change 引用bind需要加 ref 修饰 int bind_num_v = 10; auto bind_num_f = std::bind(test_binder_function2,bind_num_v); bind_num_f(); std::cout << bind_num_v << std::endl; // bind_num_v will change auto bind_num_f_c = std::bind(test_binder_function2,ref(bind_num_v)); bind_num_f_c(); std::cout << bind_num_v << std::endl; // bind class function 绑定类成员函数 auto class_bind_f = std::bind(&BindTestClass::Print, _1, "my name is:"); BindTestClass bindc("nicolas"); class_bind_f(bindc); return 0;}

 

转载于:https://www.cnblogs.com/biyeqingfeng/p/4920822.html

你可能感兴趣的文章
【原创】MapReduce程序如何在集群上执行
查看>>
Bean进行操作的相关工具方法
查看>>
Struts2学习笔记 - Part.01
查看>>
转载->C#中的委托的使用和讲解
查看>>
WMS
查看>>
基于mykernel完成多进程的简单内核
查看>>
Python入门 值内存管理与所有的关键字
查看>>
Python 之类型转换
查看>>
nginx的access_log与error_log(三)
查看>>
Activity常见控件三——progressBar
查看>>
[LeetCode] Binary Search Tree Iterator
查看>>
201671010456-张琼 实验四 软件工程结对项目
查看>>
struts2跟struts1的区别
查看>>
过滤器的使用方法
查看>>
ip mac 子网掩码 默认网关
查看>>
10.21 模拟赛
查看>>
PHP环境搭建
查看>>
httpwebrequest 服务器提交了协议冲突. section=responsestatusline
查看>>
HBase相关
查看>>
用Duilib界面库开发的一个日历控件
查看>>