std::function

1. 简介

函数模板
std::function<>是一种通用、多态的函数封装。
std::function<>可以存储和调用任何可调用的目标。

1.1.1 和函数指针对比

/* 函数指针方式 */
typedef void (*callbackFun)(int, int);
void fun(int num1, int num2){};

callbackFun f1 = fun;
f1(1, 2);

/* std::function<>方式 */
void fun(int num1, int num2){};

std::function<void(int, int)>f2 = fun;
f2(1,2);

1.1.2 绑定普通函数

void func(void)
{
	std::cout<<__FUNCTION__<<endl;
}

std::function<void(void)> fp = func;
fp();//调用

1.1.3 绑定类的静态成员函数

class Obj
{
public:
	static int func(int a, int b)
	{
		return a + b;
	}
};

std::function<int(int, int)> fp = Obj::func;
fp(1, 2);

1.1.3 绑定类的普通成员函数

class Obj
{
public:
	int func(int a)
	{
		cout<<a<<endl;
		return 0;
	}
};

/************************
第二种声明方法是采用类对象的引用
*************************/
std::function<int(Obj, int)> fp = &Obj::func;
std::function<int(Obj&, int)> fp = &Obj::func;

//要传入具体对象
Obj obj1;
fp(obj1, 2);

1.1.4 绑定类函数模板


class Obj
{
public:
	template <class T>
	T func(T a, T b)
	{
		return (T)0;
	}
};

/* 模板为int */
std::function<int(Obj&, int,int)> fp = &Obj::func<int>;
Obj obj1;
fp(obj1, 1, 2);

/* 模板为string */
std::function<string(Obj&, string, string)> fp = &Obj::func<string>;
Obj obj2;
fp(obj2, "a", "b");

1.1.5 绑定类共有数据成员

class Obj
{
public:
	int num;
	Obj(int tNum):num(tNum){}
};


std::function<int(Obj&)> intp = &Obj::num;

Obj obj1(100);
cou<<intp(obj1)<<endl;//输出为100.

1.1.6 回调函数方式


void call(string a, std::function<int(string)> fp)
{
	fp(a)
}

int func(string &a)
{
	cout<<a<<endl;
	return 0;
}
call("hello", func)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值