std::bind和std::function

std::bind 用于绑定一个函数,返回另外一种调用方式的函数对象 ,可以改变参数顺序 和个数

std::function 用于构建一个函数特别是 回调函数  ,用于替代 函数指针/*常和匿名函数一起用回调*/

参考以下代码

#include<iostream>

#include "functional"

using namespace std;

double calculate(double x, double y, char op)
{
	switch (op)
	{

	case  ‘+‘:
	{
				 return x + y;
	}break;

	case  ‘-‘:
	{
				 return x - y;
	}break;
	}
	return 0;
}

int main()
{

	//bind
	auto plus = std::bind(calculate, std::placeholders::_1, std::placeholders::_2, ‘+‘);/*calculate 参数1 参数2*/
	auto sub = std::bind(calculate, std::placeholders::_2, std::placeholders::_1, ‘-‘);/*calculate 参数2 参数1*/
	cout << plus(5, 2) << endl;
	cout << sub(5, 2) << endl;/*调用时候 5为 calculate的第二个参数*/

	//function
	typedef	std::function<double(double , double , char)> func;
	func fun = calculate;
	cout << fun(1, 2, ‘+‘) << endl;;

	//function ptr
	 double (*p)(double, double, char) =calculate;
	 cout << p(1, 1, ‘+‘) << endl;;

	//function + bind
	std::function<double (double , double )> plus_2;
	plus_2 = plus;
	cout << plus_2(2, 3) << endl;;

	system("pause");
	return 0;

}
时间: 2024-12-28 17:30:18

std::bind和std::function的相关文章

c++11特性与cocos2d-x 3.0之std::bind与std::function

昨天同事让帮忙写一小功能,才发现cocos2d-x 3.0 和 cocos2d-x 3.0rc0 差别还是相当大的. 发现Label这一个控件,3.0就比rc0版本多了一个创建函数,更为关键的是3.0内的Label锚点是在ccp(0.5,0.5),而一直3.0rc0是ccp(0,0). 累觉不爱.尽管cocos2d-x改变太快,兼容性一次次的暴露出不足,但是,总归是向好的方向进行.于是下载了3.0来玩玩~ cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码:

muduo库中的核心:std::bind和std::function

最近在读完陈硕大牛的<Linux多线程服务端编程>以及muduo源码后,对其中的一些实现细节有着十分深刻的印象,尤其是使用std::bind和std::function的回调技术.可以说,这两个大杀器简直就是现代C++的"任督二脉",甚至可以解决继承时的虚函数指代不清的问题.在此详细叙述使用std::bind和std::function在C++对象之间的用法,用以配合解决事件驱动的编程模型.笔者才疏学浅,如果解释的不正确希望朋友们不吝赐教. 下面的所有讨论基于对象. std

c++11之std::bind和function

基本测试代码 #include<iostream> #include<functional> void func(void) { std::cout << __FUNCTION__ << std::endl; } void callback(std::function<int(int,char*)> fr) { fr(1,"gdg"); } int strlength(int n,constchar* str) { retur

C++11 std::bind std::function 高级使用方法

从最基础的了解,std::bind和std::function /* * File: main.cpp * Author: Vicky.H * Email: [email protected] */ #include <iostream> #include <functional> #include <typeinfo> #include <string.h> int add1(int i, int j, int k) { return i + j + k;

C++ 11 std::function std::bind使用

cocos new 出新的项目之后,仔细阅读代码,才发现了一句3.0区别于2.0的代码: auto closeItem = MenuItemImage::create( "CloseNormal.png", "CloseSelected.png", CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); 2.0内的代码用的不是CC_CALLBACK_1而是menu_selector. CC_CALLBACK系列是3.

STL C++ std::bind操作例子,仿函数操作配合算法库操作

1.stl::bind 和std::mem_fun_ref系列的配合使用出现了问题,多参形式不知道如何组织.适配器的操作真心难受!!!只能迷迷糊糊地用着.要使用非质变算法时需要作用于容器时只能考虑lambda或者transfer操作.待续 // functor-adapter_p431.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <algorithm>//元素操作算法 #include <functiona

std::bind接口与实现

前言 最近想起半年前鸽下来的Haskell,重温了一下忘得精光的语法,读了几个示例程序,挺带感的,于是函数式编程的草就种得更深了.又去Google了一下C++与FP,找到了一份近乎完美的讲义,然后被带到C++20的ranges library,对即将发布的C++20满怀憧憬.此时,我猛然间意识到,看别人做,觉得自己也能做好,在游戏界叫云玩家,在编程界就叫云程序员啊! 不行,得找点事干.想起同样被我鸽了很久的<functional>系列,刚好与函数式编程搭点边,就动笔写吧!这就是本文的来历. 找

C++ std::bind

C++11的std::bind是个巨大的进步,把各种稀奇古怪的函数对象统一起来.古老的bind1st终于退出历史舞台.但是bind仍旧存在漏洞.例如: #include <iostream> #include <cmath> #include <functional> // std::bind using namespace std::placeholders; // adds visibility of _1, _2, _3,... double bevel(doub

实战c++中的vector系列--对vector&amp;lt;自己定义类&amp;gt;使用std::find 和 std::find_if 算法

之前博客讲了一些关于std::find和std::find_ if的一些使用方法.可是没有讲述对于vector中存储的是自己定义的类.那么怎么样使用std::find和std::find_if进行查找呢? 先定义一个类: class Item { private: std::string m_ItemId; int m_Price; int m_Count; public: Item(std::string id, int price, int count): m_ItemId(id), m_C