北京网站建设方案品牌公司,域名不用了需要注销吗,招聘网站大全,2022年新闻热点摘抄知识回顾#xff1a; 在C中我们要调用一个函数是需要用到函数指针 在C中我们调用一个函数有两种方法。1.仿函数。2.lambda 多种方式在调用时#xff0c;就会出现多种情况#xff0c;为方便接收#xff0c;C11引出包装器的概念 std::function类模板函数是一个通用的可调用…知识回顾 在C中我们要调用一个函数是需要用到函数指针 在C中我们调用一个函数有两种方法。1.仿函数。2.lambda 多种方式在调用时就会出现多种情况为方便接收C11引出包装器的概念 std::function类模板函数是一个通用的可调用对象的包装器它用简单的、统一的方式处理可调用对象。使用包装器之前需要包含头文件#include functional。 格式function返回类型(参数列表) 如果std::function对象未包装可调用对象使用std::function对象将抛出std::bad_function_call异常。 三种调用
1.普通函数
//普通函数
void swap_func(int r1, int r2)
{int tmp r1;r1 r2;r2 tmp;
}
2.仿函数
//仿函数
struct Swap
{void operator()(int r1, int r2){int tmp r1;r1 r2;r2 tmp;}
};
3.lambda函数 //lambda函数auto swaplambda [](int r1, int r2) {int tmp r1;r1 r2;r2 tmp;};
包装器的使用 //利用包装器包装//包装基础函数--只传函数地址函数名functionvoid(int, int) f1 swap_func;f1(x, y);cout x y endl endl;//包装仿函数--调用用Afunctionvoid(int, int) f2 Swap();f2(x, y);cout x y endl endl;//包装lambda函数--传lambda对象名functionvoid(int, int) f3 swaplambda;f3(x, y);cout x y endl endl; 由function包装器定义知道是一个function类而使用类就需要创造一个类对象才能调用类里的东西所以每个function包装器都需要创建一个类对象去接收对应需要包装的函数/对象 接收后function包装器定义的对象就是该包装器所包装的函数的函数名可直接使用该对象去调用函数f3(x, y); 创造map去列出一系列对应可调用函数 //列表初始化mapstring, functionvoid(int, int) cmdOP {{函数指针, swap_func},{仿函数, Swap()},{lambda, swaplambda},};//map含有键值对《ab》,[a]调用后就访问的他对应的b对象cmdOP[函数指针](x, y);cout x y endl endl;cmdOP[仿函数](x, y);cout x y endl endl;cmdOP[lambda](x, y);cout x y endl endl;
全部代码
#includeiostream
#includemap
#includealgorithm
#includefunctional
using namespace std;//普通函数
void swap_func(int r1, int r2)
{int tmp r1;r1 r2;r2 tmp;
}//仿函数
struct Swap
{void operator()(int r1, int r2){int tmp r1;r1 r2;r2 tmp;}
};int main()
{int x 0, y 1;//原数cout x y endl;//lambda函数auto swaplambda [](int r1, int r2) {int tmp r1;r1 r2;r2 tmp;};//利用包装器包装//包装基础函数--只传函数地址函数名functionvoid(int, int) f1 swap_func;f1(x, y);cout x y endl endl;//包装仿函数--调用用Afunctionvoid(int, int) f2 Swap();f2(x, y);cout x y endl endl;//包装lambda函数--传lambda对象名functionvoid(int, int) f3 swaplambda;f3(x, y);cout x y endl endl;//列表初始化mapstring, functionvoid(int, int) cmdOP {{函数指针, swap_func},{仿函数, Swap()},{lambda, swaplambda},};//map含有键值对《ab》,[a]调用后就访问的他对应的b对象cmdOP[函数指针](x, y);cout x y endl endl;cmdOP[仿函数](x, y);cout x y endl endl;cmdOP[lambda](x, y);cout x y endl endl;return 0;
}
类的成员函数和普通调用区别 详细见bind