c++ - 模板参数中具有特殊整数的模板

标签 c++ templates

这是一个常见的模板函数

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

但是,我也看到了类似这样的模板:

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

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

最佳答案

它叫做 non-type template parameters .您可以使用整数等简单类型

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

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

不允许 float 和 double 。但为什么?!看看Why can't I use float value as a template parameter?

关于c++ - 模板参数中具有特殊整数的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48490283/

相关文章:

c++ - 不同平台/系统中限定符大小的变化

c++ - gdb 步骤没有按预期工作

c++ - 如何对 std::tuple 中的每个元素应用 constexpr 函数?

css - django 模板中的行

visual-studio - VS2013 和 Azure - 部署模板验证失败,尽管我既没有编辑模板也没有编辑项目属性

c++ - 在依赖于参数的查找(或解决方法?)之前发生模板替换的任何方式

c++ - 具有 O(1) 插入(分摊)和 O(n) 迭代的容器

c++ - 第二次调用函数时出现段错误?

c++ - 我可以在 Bigger Linux for Galileo 上的常规 C++ 程序中 #include "arduino.h"吗?

c++ - 当我可以将对象的实际类型指定为模板参数时内联虚函数