模板参数中具有特殊整数的模板

template with special integer in the template param

本文关键字:整数 参数      更新时间:2023-10-16

这是一个常见的模板函数

template <typename T>
void func(T param) {
   // ...
}

但是,我也看到如下所示的模板:

template <typename T, std::size_t N>  // note the extra N
void func(T param) {
   // ...
}

我知道这是合法的,但明显的 N 与参数的类型无关。在模板中添加额外整数的官方规则是什么? 这叫什么?我可以将额外的模板参数设置为浮点数或双精度而不是整数吗?如果不是,为什么整数是特殊的?

它被称为非类型模板参数。您可以使用简单的类型,例如整数

  • std::nullptr_t (自C++11起(;
  • 整体式;
  • 左值引用类型(对象或函数(;
  • 指针类型(指向对象或函数(;
  • 指向成员
  • 类型的指针(指向成员对象或成员函数(;
  • 枚举类型。

请注意,从 C++17 开始,您可以使用 auto 来允许扣除非类型模板参数。

不允许浮动和双打。但是为什么?!看看为什么我不能使用浮点值作为模板参数?