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

被折叠的 条评论
为什么被折叠?



