c++函数包装器之function

〇、前言

  刚刚从C语言转到C++,最不习惯的是C++下有很多库、模板等功能,改变了以前什么都自己写的局面。但是也存在很多要学习的地方,需要多练习,多总结。

  什么是函数包装器,其实就是用来存放函数指针,稍后调用,c里面的回调函数功能。一般在异步的过程中会比较多,比如定时器,可以参考一下伪代码。

//伪代码
//定时器的回调函数
void handler()
{
    //do something
}
//设置定时器的时间和函数
timer.t = 1000;
timer.func = handler;
//时间到了以后自动调用hanler
timer.func();

一、包装器function

  模板function是在头文件functional中声明的,它可以包装特征标相同的函数指针、函数对象或lambda表达式,从而进行调用。

二、实验

2.1 代码

/*************************************************************************
    > File Name: main.c
    > Author: JayTan
    > Mail: jay.tan.guizhou@gmail.com 
    > Created Time: 
 ************************************************************************/

#include <iostream>
#include <functional>

using namespace  std;

//函数对象
class AddFunc
{
public:
    AddFunc(int m):more(m){
    }
    int operator()(int a,int b){ return a + b + more;}
private:
    int more;
};

//函数
int add_two_nomal(int a, int b)
{
    return a+b;
}

int main(int argc, char** argv)
{
    //包装函数
    function<int(int, int)> func1 = add_two_nomal;  
    //包装lambda函数
    function<int(int, int)> func2 = [](int a, int b){ return a+b+10;};  
    //包装函数对象
    function<int(int, int)> func3 = AddFunc(20);

    cout<< "add_two_nomal: 10 + 20 = " << func1(10, 20) <<endl;

    cout<< "lambda: 10 + 20 = " << func2(10, 20) <<endl;

    cout<< "AddFunc: 10 + 20 = " << func3(10, 20) <<endl;

    return 0;
}

2.2 编译

g++ main.c -o test

2.3 结果

# ./test
add_two_nomal: 10 + 20 = 30
lambda: 10 + 20 = 40
AddFunc: 10 + 20 = 50

三、结论

  function可以包装特征标相同的函数指针、函数对象或lambda表达式。

注释:

  特征标:官方解释没找到,自己的理解就是参数一样的函数。

参考:

《C++ primer Plus》(第6版)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值