Templates
泛型 lambda 表达式
C++14 引入了泛型 lambda 表达式,它的写法如下:
就是在 lambda 表达式中使用 auto
关键字,它会在编译时生成如下成员模板:
class lambdaName {
public:
template<class Tp1,class Tp2>
auto operator()(Tp1 a, Tp2 b) const {
return a + b;
}
};
变量模板
C++14 开始,变量也可以被某种类型参数化,引入变量模板的主要目的是为了简化定义(simplify definitions)以及对模板化常量(parameterized constant)的支持。
通过以下代码定义了一个参数化类型的 \(\pi\):
使用它时要指定 \(\pi\) 的类型:
变量模板也可以是非类型模板,如下:
使用时给定数组个数,即可:
要注意的是在不同编译单元初始化或使用 arr
时,只要模板参数相同,使用的都是同一个 arr
。