可变参数
Args模板参数包
解析参数包,使用递归和再来一个参数包。参数包传参时,会把第一个数据给前面的,剩下的数据全部传给后面的参数包,参数包就一直变小。
lambda表达式
书写格式:[capture-list] (parameters) mutable -> return-type { statement
}
捕捉列表,参数列表,mutable可以不写取消常属性,返回类型如果编译器可以自动推导也可以不写,函数体。
例:
lambda本质是一个匿名对象,里面重载了operator()所以可以通过仿函数的形式调用。
[]捕捉列表,捕捉过来的参数成为了lambda的成员变量,所以可以在里面用。
但是默认是常量,想修改可以加上面的mutalbe。
[=]:表示值传递方式捕获所有父作用域中的变量(包括this)。
[&]:表示引用传递捕捉所有父作用域中的变量(包括this
[var]:表示值传递方式捕捉变量var。
[&var]:表示引用传递捕捉变量var。
[this]:表示值传递方式捕捉当前的this指针。
function包装器
可以包装函数指针,仿函数,lambda。
使用举例,把一些可调用对象存到容器里。function就可以作为容器的类型
bind调整参数个数