您当前的位置: 首页 >  c++

龚建波

暂无认证

  • 4浏览

    0关注

    313博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++ std::function函数包装器

龚建波 发布时间:2020-03-28 15:19:08 ,浏览量:4

0.前言

类模板 std::function 是通用多态函数封装器。 std::function 的实例能存储、复制及调用任何可调用对象。C++语言中有多种可调用对象:函数、函数指针、lambda表达式、bind创建的对象以及重载了函数调用运算符的类(仿函数)等。

和其他对象一样,可调用对象也有类型。如:每个lambda有它自己唯一的(未命名)类类型;函数及函数指针的类型则由其返回值类型和实参类型决定。然而,不同类型的可调用对象可能共享同一种调用形式。调用形式指明了返回的类型以及传递给调用的实参类型。一种调用形式对应一个函数(function)类型,如:

int(int,int)

是一个函数类型,它接受两个int,返回一个int。

1.使用 std::function 包装可调用对象

通过std::function,我们可以把可调用对象包装为更通用的形式。参照《C++ Primer》上计算器的例子:

#include 
#include 
#include 
#include 

//函数
int add(int a, int b) { return a + b; }
//lambda
auto mod = [](int a, int b) { return a % b; };
//仿函数
struct divide
{
	int operator()(int a, int b) { return a / b; }
};


int main()
{
	using namespace std;
	map binops{
		{"+",add}, //函数指针
		{"-",std::minus()}, //标准库函数对象
		{"/",divide()}, //用户定义的函数对象
		{"*",[](int a,int b) { return a * b; }}, //未命名的lambda
		{"%",mod} //命名的lambda
	};

	cout             
关注
打赏
1655829268
查看更多评论
0.0439s