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
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?