C++新特性function

本文详细介绍了C++中std::function和std::bind的使用。std::function作为一个函数容器,可以存储任何可调用对象,方便函数作为对象处理。std::bind则用于绑定函数参数,允许在缺少完整参数的情况下创建新的可调用对象。通过示例,展示了如何使用std::function存储和调用函数,以及std::bind如何预先绑定参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <iostream>
#include <functional>

/*
std::function 是一种通用、多态的函数封装,它的实例可以对任何可以调用的目标实体进行存储、复制和调用操作
换句话说,就是函数的容器,有了函数的容器就可以更方便的将函数、函数指针作为对象进行处理
*/
typedef std::function<int(int,int)> addPtr;

int add(int a, int b)
{
    return (a)+(b);
}

void test1()
{
    addPtr addFunc = add;
    std::cout<<addFunc(10, 10)<<std::endl;

    int arg = 10;
    auto addFunc1 =  [=](int a, int b)->decltype((a) + (b) + arg){
            return (a) + (b) + arg;
        };

    std::cout<<addFunc1(1,2)<<std::endl;     // 13  
}
/*
std::bind 则是用来绑定函数调用的参数的, 它解决的需求是我们有时候可能并不一定能够一次性获得调用某个函数的全部参数,
通过这个函数, 我们可以将部分调用参数提前绑定到函数身上成为一个新的对象,然后在参数齐全后,完成调用
*/
int add_three(int a, int b, int c)
{
    return a+b+c;
}
void test2()
{
    // std::placeholders::_1 来对第一个参数进行占位, 将参数3,4绑定到函数上
    auto addFunc = std::bind(add_three, std::placeholders::_1, 3, 4);

    // 调用函数时,只需要传入第一个参数即可,即便传入后面两个参数也没有效果,bind已经将第2和第3个参数进行绑定了
    std::cout<<addFunc(5)<<std::endl; // 12

    std::cout<<addFunc(5,6, 7)<<std::endl; // 12

}
int main()
{
    test1();
    test2();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值