std::bind和std::function

本文介绍了C++中std::bind和std::function的功能与使用方法,并通过示例展示了如何利用这两种工具来调整函数的调用方式及创建回调函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;

}


转载于:https://my.oschina.net/kkkkkkkkkkkkk/blog/513445

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值