function<T>

发展

boost::function<bool(void, int)> func

c++11 后:

std::function包含于头文件 #include<functional>中

什么是function<T>

function<T>是一个模板类,封装有函数指针类型,即T一定要是函数指针类型。

为什么引入function<T>

1. 把不同的函数类型统一成同一种类型,从而为模板函数提供统一接口。

2. 简化了函数指针的声明

可将各种可调用实体进行封装统一,包括:普通函数、lambda、表达式、函数指针、仿函数

function模板相对于一般模板的优点就是模板实例化次数更少,一般模板对上述每种类型都要实例化依次,function模板对类型相同的各种类型只实例化一次

//普通函数

int add(int a, int b){ 

    return a+b; 

}

//lambda表达式

auto mod=[](int a, int b){return a%b;};

//函数对象

struct divide{ 

    int operator()(int m, int n){ 

        return m/n; 

    } 

}; 

function<int(int,int)> func1= add; 

function<int(int,int)> func2= divide(); 

function<int(int,int)> func3= mod; 

//被封装后普通函数、Lambda、函数对象对属于同一个类型,放到函数模板中后,只实例化一次

function的实现

function<T> 就是对函数、lambda函数指针的封装,T为函数指针类型。

定义多种类型转换构造函数,就可以把lambda函数指针、普通函数指针、函数对象等转换为function类型。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。