lamdba用处
Qt5可以使用lamdba表达式,有一些槽很简短,如果写一个新的槽函数就比较麻烦且浪费时间,这种就可以使用lamdba表达式
QPushButton *cancelButton = new QPushButton("取消");
connect(cancelButton, &QPushButton::clicked, [dlg]{
dlg->close();
});
上图很简单的例子,取消功能,就一句话,如果写一个槽函数比较浪费时间和空间,所以可以使用lamdba表达式;
使用方法
[capture](parameters) mutable ->return-type{statement}
[capture]
捕获列表,如果想使用父作用域的变量,必须要先捕获,再使用,如果不捕捉可以直接使用[]
里面不使用东西
[dlg]
,[&dlg]
一个是捕捉的正常变量,一个捕捉的是引用[=] [&]
前者捕捉所有父作用域的变量,后者为引用捕捉.两者捕捉的皆包含this
指针[this]
捕捉this
指针
(parameters)
参数列表,和正常的函数一样,如果无参数可省略括号mutable
mutable修饰符。默认情况下,Lambda函数总是一个const函数,mutable可以取消其常量性。在使用该修饰符时,参数列表不可省略(即使参数为空)(没用过,所以copy来的);->return-type
返回类型,如果不用则可省略{statement}
函数体
//copy了一段代码,可以注意下返回的类型
#include<iostream>
using namespace std;
typedef enum
{
add = 0,
sub,
mul,
divi
}type;
int main()
{
int a = 10;
int b = 20;
auto func = [=](type i)->int {
switch (i)
{
case add:
return a + b;
case sub:
return a - b;
case mul:
return a * b;
case divi:
return a / b;
}
};
cout<<func(add)<<endl;
}