文档章节

c++ std::bind和std::function

SibylY
 SibylY
发布于 08/17 10:55
字数 264
阅读 7
收藏 0

定义于头文件 <functional>

std::bind 函数绑定,https://zh.cppreference.com/w/cpp/utility/functional/bind

// bind 用例
#include <iostream>
#include <functional>
 
// 自定义的一个函数
double my_divide (double x, double y) {return x/y;}
// 自定义的一个结构体
struct MyPair {
  double a,b;
  double multiply() {return a*b;}
};
 
int main () {
  // 这个using是为了使用 _1, _2, _3,...
  using namespace std::placeholders;
 
  // 捆绑函数:
  auto fn_five = std::bind (my_divide,10,2); // 返回 10/2
  std::cout << fn_five() << '\n'; // 输出 5
 
  auto fn_half = std::bind (my_divide,_1,2); // 返回 x/2
  std::cout << fn_half(10) << '\n'; // 输出 5
 
  auto fn_invert = std::bind (my_divide,_2,_1); // 返回 y/x
  std::cout << fn_invert(10,2) << '\n'; // 输出 0.2
 
  auto fn_rounding = std::bind<int> (my_divide,_1,_2); // 返回 int(x/y)
  std::cout << fn_rounding(10,3) << '\n'; // 输出 3
 
  MyPair ten_two {10,2};
 
  // 捆绑成员函数:
  auto bound_member_fn = std::bind (&MyPair::multiply,_1); // 返回 x.multiply()
  std::cout << bound_member_fn(ten_two) << '\n'; // 输出 20
 
  auto bound_member_data = std::bind (&MyPair::a,ten_two); // 返回 ten_two.a
  std::cout << bound_member_data() << '\n'; // 输出 10
 
  return 0;
}

 

仿函数:又叫std::function,是C++中的一个模板类

 

© 著作权归作者所有

共有 人打赏支持
上一篇: c++11 线程类
下一篇: c++ std::move
SibylY
粉丝 29
博文 437
码字总数 344084
作品 0
海淀
程序员
私信 提问
CC_CALLBACK原理及应用

c++ 11 基础 : std::function 类模版 std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标进行存储、复制、和调用操作,这些目标包括函数、lambda表达式...

霄霄月月
2014/04/07
0
1
[C/C++]完整揭秘VS2010关于function和bind的实现

很久之前我就对C++里面的function非常感兴趣,也探究出了一些成果。 [C/C++]std::tr1::function源码剖析(一) [C/C++]std::tr1::function源码剖析(二) 这两篇文章是对VS2010中如何实现fun...

梁欢
2013/10/25
0
0
C/C++常见gcc编译链接错误解决方法

除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词): 用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享...

一见蓝天
2015/05/19
0
0
c++11实现异步定时器

c++11提供了丰富的时间和线程操作函数,比如 std::this_thread::sleep, std::chrono::seconds等。可以利用这些来很方便的实现一个定时器。 实现 ifndef TIMERH define TIMERH include includ...

moki_oschina
05/23
0
0
c++ 知识点 std::function 使用

版权声明:www.gudianxiaoshuo.com (古典小说网) 今日头条号: 古典古韵古典小说、讨厌编程 https://blog.csdn.net/shuilan0066/article/details/82788954 这是c++11新添加的,头文件#incl...

shuilan0066
09/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

POSIX正则

简介 因为之前对于POSIX类的正则表达式使用的比较少,也就没有上心去记忆,最近因为使用的比较多,就仔细的看了一下做了一个简单的总结。 表达式 \p{Lower} 小写字母字符:[a-z] \p{Upper} 大...

trayvon
43分钟前
1
0
soapui的安装使用

https://blog.csdn.net/weiqing723/article/details/78865734

暗中观察
49分钟前
0
0
ACID学习记录

ACID的C即一致性,打比方,多个线程并发执行转账业务:A转给B一块钱,无论成功与否(A+B)的总额是不会变的。事务执行前与执行后数据内在的逻辑始终是成立的。这里就是转账前与转账后两人存款的...

wmzsonic
今天
0
0
手写tomcat+servlet

写程序一定要有思路,思路很重要! 一、我们分两步第一步先实现手写tomcat,第二部写servlet 所用技术: 1、soket通信 IO流 2、http请求与相应 3、解析xml 4、java反射技术 导入所需要的jar...

jason_kiss
今天
1
0
Beetl模板的基础用法 【变量、循环、条件】---《Beetl视频课程》(2)

本期视频做了一个博客的首页列表; 内容简介:springboot 集成 beetlsql;使用for循环,使用if控制语句,使用虚拟属性,定义变量等等 一起学beetl目录:https://my.oschina.net/u/1590490?ta...

Gavin-King
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部