模板参数分为两种,一种是类型模板参数,也是我们用得最多的一种: template auto add(T t, U u) {
return t+u; } 里面的 T 和 U 都是类型模板参数。
另一种是非类型模板参数,它可以让不同的字面量成为模板的参数: template class buffer_t {
public: T& alloc(); void free(T& item); private: T data[BufSize]; } buffer_t buf; // 100 作为模板参数
我们在编写模板的时候就必须明确非类型模板参数的具体类型,C++17 打破了这一限制,让我们能够在非类型模板参数中使用 auto 关键字,从而让编译器推导具体的类型: template void foo() {
return; } foo<10>();
一个测试程序;
[code][/code] |