文档章节

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

SibylY
 SibylY
发布于 08/17 10:55
字数 264
阅读 5
收藏 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++中的一个模板类

 

© 著作权归作者所有

共有 人打赏支持
SibylY
粉丝 29
博文 433
码字总数 343652
作品 0
海淀
程序员
[C/C++]完整揭秘VS2010关于function和bind的实现

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

梁欢
2013/10/25
0
0
CC_CALLBACK原理及应用

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

霄霄月月
2014/04/07
0
1
C/C++常见gcc编译链接错误解决方法

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

一见蓝天
2015/05/19
0
0
C++11新特性:Lambda函数(匿名函数)

声明:本文参考了Alex Allain的文章http://www.cprogramming.com/c++11/c++11-lambda-closures.html 加入了自己的理解,不是简单的翻译 C++11终于知道要在语言中加入匿名函数了。匿名函数在很...

vazor
2012/12/30
0
0
关键词: 和

关键词:< iostream > 和 < iostream.h > 你写程序的时候,用< iostream >还是< iostream.h >? 你知道它们有什么区别么?还是认为他们根本就是一样的? 下面听我给你吹(文中纯属个人言论,...

AlphaJay
2010/06/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

no such module 'pop'问题

在github上 clone 了一个 swift 项目,编译时提示"no such module 'POP'"错误,查了一下居然是因为podfile中指定的最低版本是iOS 11.0,大于我测试手机的iOS版本10.3.3,将Podfile中的最低版...

yoyoso
今天
1
0
redis 系列一 -- 简介及安装

1.简介 redis -- remote dictionary server 远程字典服务 使用 C 语言编写; 高性能的 key-value数据库; 内存数据库,支持数据持久化。 Redis 是一个开源(BSD许可)的,内存中的数据结构存...

imbiao
今天
3
0
nginx log记录请求响应时间

有时为了方便分析接口性能等,需要记录请求的时长,通过修改nginx的日志格式可以做到,如 添加一个新的log_format log_format timed_combined '$remote_addr - $remote_user [$time_local] "...

swingcoder
今天
4
0
Spring MVC之RequestMappingHandlerMapping匹配

对于RequestMappingHandlerMapping,使用Spring的同学基本都不会陌生,该类的作用有两个: 通过request查找对应的HandlerMethod,即当前request具体是由Controller中的哪个方法进行处理; 查...

爱宝贝丶
今天
5
0
Java Web--增删改查之二界面后台java代码(转载参考)

/** *  *//** * @author Administrator * */package dao; import java.sql.*;public class DBConn {/** * 链接数据库 * @return */  ...

小橙子的曼曼
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部