传统艺能😎
小编是双非本科大一菜鸟不赘述,欢迎米娜桑来指点江山哦(QQ:1319365055)
🎉🎉非科班转码社区诚邀您入驻🎉🎉
小伙伴们,打码路上一路向北,彼岸之前皆是疾苦
一个人的单打独斗不如一群人的砥砺前行
这是我和梦想合伙人组建的社区,诚邀各位有志之士的加入!!
社区用户好文均加精(“标兵”文章字数2000+加精,“达人”文章字数1500+加精)
直达: 社区链接点我
概念🤔
所谓的包装器其实就是 function 包装器,也称为适配器,他的功能就是对可调用对象进行包装,包装器底层原理的本质其实就是类模板
包装器定义式:
template <class T> function; // undefined
template <class Ret, class... Args>
class function<Ret(Args...)>;
其中的 R e t \color{red} {Ret } Ret 是被包装的可调用对象的返回值类型, A r g s . . . \color{red} {Args...} Args... 是被包装的可调用对象的形参类型
function包装器可以对可调用对象进行包装,包括函数指针、函数名、仿函数(函数对象)、lambda表达式、类的成员函数:
int f(int a, int b)
{
return a + b;
}
struct Functor
{
public:
int operator()(int a, int b)
{
return a + b;
}
};
class Plus
{
public:
static int plusi(int a, int b)
{
return a + b;
}
double plusd(double a, double b)
{
return a + b;
}
};
int main()
{
//包装函数指针、函数名
function<int(int, int)> func1 = f;
cout << func1(1, 2) << endl;
//包装仿函数(函数对象)
function<int(int, int)> func2 = Functor();
cout << func2(1, 2) << endl;
//包装lambda表达式
function<int(int, int)> func3 = [](int a, int b){
return a + b; };
cout << func3(1, 2) << endl;
//类的静态成员函数
//function<int(int, int)> func4 = Plus::plusi;
function<int(int, int