FunctionTypeWrapper(外覆器)和lambda-创新互联

关于c++标准库学习的一些心得,写下来,以后忘了可以回头看看

成都创新互联公司是专业的汉阳网站建设公司,汉阳接单;提供做网站、成都网站制作,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行汉阳网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

目录

前言

一、function<>的作用

二、callable object

三.与 lambda 结合

四、lambda函数和template结合使用的场景

​​​​​​​总结



前言

总结一下std::function<>和lambda一起用的注意事项。

一、function<>的作用

std::function声明在文件内,提供多态外覆器,可以概括function pointer记号。这个class允许可调用对象(callable object)当作最高级对象。


二、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://ybzwz.com/article/hhdjj.html