C++ 11之std::bind用法
#include <iostream>
#include <functional>
#include <stdio.h>
int funcA( int a, int b )
{
return a + b;
}
int funcB( int &a, int &b )
{
++a;
return a + b;
}
class C
{
public:
int funcC( int a, int b ) {
return a + b;
}
};
int main(int argc, char *argv[])
{
// 绑定一个普通函数,传递的参数为1、2
auto fn0 = std::bind( funcA, 1, 2 );
std::cout << fn0() << std::endl; // 3
// 绑定一个普通函数,第一个参数为占位符(用于调用时传参),第二个参数为3
auto fn1 = std::bind( funcA, std::placeholders::_1, 3 );
std::cout << fn1( 1 ) << std::endl; // 4
// 占位符是引用传递,第二个参数为值传递(虽然funcB的2个参数都为引用)
auto a = 1;
auto b = 1;
auto fn2 = std::bind( funcB, std::placeholders::_1, b );
std::cout << fn2( a ) << std::endl; // 3
std::cout << a << std::endl; // 2 引用传递
std::cout << b << std::endl; // 1 值传递
// 绑定一个类的实例函数,传递的参数为1、2
C c;
auto fn3 = std::bind( &C::funcC, c, 1, 2 );
std::cout << fn3() << std::endl; // 3
// 绑定一个类的实例函数,参数为占位符,返回值为函数类型
std::function<int(int,int)> fn4 = std::bind( &C::funcC, c, std::placeholders::_1, std::placeholders::_2 );
std::cout << fn4( 1, 2 ) << std::endl; // 3
system( "pause" );
return 0;
}
C++ 11之std::bind用法的更多相关文章
- C/C++ C++ 11 std::function和std::bind用法
std::bind() std::bind 主要用于绑定生成目标函数,一般用于生成的回调函数,cocos的回退函数都是通过std::bind和std::function实现的.两个点要明白: 1.绑定 ...
- c++11之std::bind简单使用
note 更多用法,请参考: cppreference 用的少,容易忘. 我的理解 类似延迟计算. 比如,回调函数,将回调函数传入后,回调函数不一定马上被调用. 它是一个模板类,调用后将生成一个新的调 ...
- C++11中std::bind的使用
std::bind: Each argument may either be bound to a value or be a placeholder: (1).If bound to a value ...
- 第11课 std::bind和std::function(2)_std::bind绑定器
1. 温故知新:std::bind1st和std::bind2nd (1)bind1st.bind2nd首先它们都是函数模板,用于将参数绑定到可调用对象(如函数.仿函数等)的第1个或第2个参数上. ( ...
- std::bind技术内幕
引子 最近群里比较热闹,大家都在山寨c++11的std::bind,三位童孩分别实现了自己的bind,代码分别在这里: 木头云的实现 mr.li的实现 null的实现,null的另一个版本的实现 这些 ...
- C++11新特性之二——std::bind std::function 高级用法
/* * File: main.cpp * Author: Vicky.H * Email: eclipser@163.com */ #include <iostream> #includ ...
- C++11之std::function和std::bind
std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...
- 转 C++11之std::function和std::bind
std::function是可调用对象的包装器,它最重要的功能是实现延时调用: #include "stdafx.h" #include<iostream>// std ...
- C++11中的std::bind
C++11中的std::bind 最近在看看cocos2dx的源代码,发现了cocos2dx 3.0相对于2.0改动了很多,最大的改变就是大量的使用了C++11的特性,比如auto等.其中有一个关于回 ...
- 【浅析C++11】std::function和std::bind
目录 std::function可调用对象包装器 std::function基本用法 std::function/std::bind与抽象工厂.工厂方法的一点思考 std::function可调用对象 ...
随机推荐
- Dify 的核心技术栈
Dify 的技术栈涵盖多个层次,结合了前沿的 AI 框架.成熟的开发工具及高效的部署方案. 以下是其核心组成: 一.基础架构与后端技术 编程语言与框架 Python + Flask:后端服务主要基于 ...
- 记vue修改数组属性,dom不发生变化的问题
目录: 目录 目录: 开篇 正确的姿势 为什么 $set 开篇 今天在写vue的时候,出现了一个以前可能没遇到的问题.我利用一个数组记录列表下按钮的启用.禁用状态,但我点击某个列表项按钮后,会修改当前 ...
- vuepress-reco搭建与部署指南
个人博客:槿苏的知识铺 一.前言 在技术飞速发展的今天,高效地编写.维护和呈现文档已成为开发者不可或缺的能力.无论是开源项目.团队协作还是个人知识沉淀,一套结构清晰.体验优雅的文档系统都能显著提升 ...
- 入口函数与包初始化:Go程序的执行次序
前言 我们可能经常会遇到这样一个问题:一个 Go 项目中有数十个 Go 包,每个包中又有若干常量.变量.各种函数和方法,那 Go 代码究竟是从哪里开始执行的呢?后续的执行顺序又是什么样的呢? 事实上, ...
- python 函数与方法的区别
函数与方法的区别 并不是类中的调用都叫方法 1.函数要手动传self,方法不用传self. 2.如果是一个函数,用类名去调用,如果是一个方法,用对象去调用. class Foo(object): de ...
- 关于IPMP
国际项目经理资质认证(International Project Manager Professional,简称IPMP)是国际项目管理协会(International Project Managem ...
- Linux下查询tomcat进程命令
由于查询tomcat进程时将ps -ef|grep tomcat命令记错为ps -f|grep tomcat命令,因此对比两个命令进行区分. ps -f |grep tomcat执行结果: dgztc ...
- BUUCTF---RSA1
RSA基础概念 rsa原理: RSA公开密钥密码体制的原理是:根据数论,寻求两个大素数比较简单,而将它们的乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥 RSA算法的具体描述如下: (1) ...
- nbhh的泛型:TDictionary
type TCity = class Country: String; Latitude: Double; Longitude: Double; end; const EPSILON = 0.0000 ...
- 移除任务栏右端"显示桌面"按钮-AutoIt
核心代码 $hwnd = WinGetHandle("[CLASS:Shell_TrayWnd]", "") ControlHide($hwnd, " ...