模板参数分为两种,一种是类型模板参数,也是我们用得最多的一种:
template <typename T, typename U>
auto add(T t, U u) {
return t+u;
}
里面的 T 和 U 都是类型模板参数。
另一种是非类型模板参数,它可以让不同的字面量成为模板的参数:
template <typename T, int BufSize>
class buffer_t {
public:
T& alloc();
void free(T& item);
private:
T data[BufSize];
}
buffer_t<int, 100> buf; // 100 作为模板参数
我们在编写模板的时候就必须明确非类型模板参数的具体类型,C++17 打破了这一限制,让我们能够在非类型模板参数中使用 auto 关键字,从而让编译器推导具体的类型:
template <auto value> void foo() {
return;
}
foo<10>();
一个测试程序;
本文介绍了C++17中非类型模板参数可以使用auto关键字,允许编译器自动推导类型,提供了一个示例函数foo。同时讨论了在DevC++中配置支持C++17遇到的问题,包括auto定义问题以及版本限制,最高只支持到C++14,提示'auto' parameter not permitted in this context的错误。
订阅专栏 解锁全文
618

被折叠的 条评论
为什么被折叠?



