FunctionTypeWrapper(外覆器)和lambda-创新互联
关于c++标准库学习的一些心得,写下来,以后忘了可以回头看看
成都创新互联公司是专业的汉阳网站建设公司,汉阳接单;提供做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行汉阳网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
目录
前言
一、function<>的作用
二、callable object
三.与 lambda 结合
四、lambda函数和template结合使用的场景
总结
前言
总结一下std::function<>和lambda一起用的注意事项。
一、function<>的作用std::function声明在
二、callable object
首先明确一下callable object定义:”可被某种方式调用其某些函数“的对象。因此,它包含这些内容:
1.一个函数,它可以接受额外传入的args作为实参。
void func(int a,int b)
2.一个指向成员函数的指针,当通过对象调用它,该对象被传为第一实参(必须是指针或者引用),其他实参则一一对应成员函数的参数。
class A{
public:
void func(int x,int y);
}
A aa;
A *bb=&aa;
A &cc=aa;
bb->func(250,250);
cc.func(250,250);
3.一个仿函数,附带的args被传递作为实参。
class A{
public:
void operator()(int a,int b);
}
A aa;
aa(250,250)
4.一个 lambda 函数。auto func=[](int a,int b){
};
l(250,250);
三.与 lambda 结合
function 提供了“明确指明函数返回类型为lambda”的唯一方法
这里解释一下引号内容:
lambda的类型,是个不具名function object(仿函数),每个lambda表达式的类型是独一无二的,因此若想根据类型声明对象,可借助template或者auto(template文末补充)
#include#includestd::functionfunction_lambda() {
//注意,因为并没有什么东西能推断的,这里不能写auto(int,int)->decltype(...),必须要指定类型
return [](int x, int y) {//第一个return代表返回lambda函数
std::cout<< "function_lambda函数开始执行"<< std::endl;
return x * y;
};
}
int main() {
auto lf = function_lambda();
std::cout<
执行结果:注意一个小细节:直接用function_lambda执行是行不通,
例如function_lambda(1, 32)会直接报错
四、lambda函数和template结合使用的场景
#include#include//template和lambda一起使用
templatevoid tt(T1 a, T2 f) {
std::cout<< "开始执行"<< std::endl;
f(a);
std::cout<< "执行完成"<< std::endl;
}
int main() {
int temp=250;
int con = 25;
tt(con, [&temp,&con](int&)->int {
std::cout<< "执行lambda函数"<< std::endl;
temp=con * temp;
return temp;
});
std::cout<< "temp="<< temp<< std::endl;
}
执行结果:总结c++真的很容易出错
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
新闻标题:FunctionTypeWrapper(外覆器)和lambda-创新互联
浏览地址:http://myzitong.com/article/hhdjj.html