这个模板语法“typename = T”是什么意思?

2024-03-11

有时我会看到这样的语法。

template<typename T,typename = int>
int foo(){
    //...
}

哪一部分typename = int意思是? 可以用在哪里?


foo有两个模板参数。第一个叫做T第二个未命名,默认为int.

仅在您的代码段中,没有理由使用第二个参数。未命名的模板参数通常会出现在 SFINAE 中。一个例子来自参考参数 https://en.cppreference.com/w/cpp/language/sfinae:

// primary template handles non-referenceable types:
template<class T, class = void>
struct reference_traits {
    using add_lref = T;
    using add_rref = T;
};
 
// specialization recognizes referenceable types:
template<class T>
struct reference_traits<T, std::void_t<T&>> {
    using add_lref = T&;
    using add_rref = T&&;
};
 
template<class T>
using add_lvalue_reference_t = typename reference_traits<T>::add_lref;
 
template<class T>
using add_rvalue_reference_t = typename reference_traits<T>::add_rref;

主模板有第二个参数的唯一原因是它可以被专门化。如果可能的话,会实例化更专业的专业化。如果失败(因为T&无效),然后“替换失败不是错误”(SFINAE)开始,并且主模板被实例化。


未命名参数的一个更简单的示例是当您希望模板参数仅作为标记来区分不同的实例化时:

template<typename = int>
struct bar {
    // ...
};

即使实施bar不依赖于您可能想要的模板参数bar<double> and bar<std::string>是两种不同的类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

这个模板语法“typename = T”是什么意思? 的相关文章

随机推荐

  • 如何在 NHibernate 中将 ICriteria 与 Enum 属性一起使用

    您好 我想编写一个 FindByExample object o 方法 所以我尝试了这个 public IList
  • 如何使用php查看受保护文件夹中的图像?

    我的网站上有一个受密码保护的目录 带有 htaccess 其中包含 jpg 文件 我不希望任何人都可以直接访问这些 jpg 但我想允许 php 脚本显示 jpg 文件 这样的事情可能吗 对于那些想知道为什么我想要这个的人 我有一个注册表单
  • 如何在 Java 代码中访问弹簧执行器健康检查的结果?

    我已经使用端点 actuator health 设置了一个运行状况检查执行器 当您访问 URL 时 它会为我的应用程序生成类似以下内容的内容 status UP app status UP db status UP 有没有办法可以使用 Sp
  • 以常见方式更改seaborn图和matplotlib库图的大小

    from pylab import rcParams rcParams figure figsize 10 10 这适用于直方图 但不适用于因子图 sns factorplot 仍然显示默认大小 sns factorplot Pclass
  • 从终端向 Clojure 应用程序发送消息

    如何向正在运行的 clojure 应用程序发送消息 例如 如果我有一个特定的变量或标志 我想在 uberjar 运行时从终端设置 这可能吗 一种方法是读取应用程序中可以更改的文件 但这听起来很笨拙 提前致谢 实现此目的的一种方法是让您的应用
  • FORTIFY_SOURCE:FD_SET:文件描述符 >= FD_SETSIZE。调用 abort()

    我是一名安卓程序员 今天我运行一个 Android 应用程序 当时我遇到了此类错误 FORTIFY SOURCE FD SET 文件描述符 gt FD SETSIZE 调用 abort 因此 如果有人知道这个问题的答案 请回复我 您的进程打
  • 如何设置 WCF 自托管 REST 服务?

    我正在尝试从我的计算机自行托管一些 WCF RESTful 服务 以供本地网络上的计算机使用 我没有使用 WCF 的经验 而且在这方面基本上是个新手 我创建了一个非常基本的 精简的控制台应用程序 看看是否可以让它工作 static void
  • 保持 Windows Mobile 应用程序在待机模式下运行

    我有一个简单的 Windows Mobile 应用程序 用于记录 GPS 坐标 每 5 分钟一次 问题是只要屏幕正常 应用程序就可以正常工作 打开后 一旦手机进入待机模式 应用程序就会停止工作 当我打开设备时 应用程序再次开始工作 我该怎么
  • 如何按数组内的属性查询嵌套对象?

    我收集了数千个 可能 30 40k 文档 其结构 大大简化 如下 propA 123 obj prop1 a prop1 b prop1 c propB 456 我如何查询以找到所有文档obj prop1 b 我似乎无法弄清楚如何检查数组属
  • 如何获得两个范围的重叠范围

    我在区间 1 15 中有以下范围 我想找到人 1 和人 2 之间的重叠范围 人物 1 1 3 5 10 人物 2 2 4 8 15 这里我应该得到一个范围列表 其中 2 3 8 10 到目前为止我发现的是先按 person1 的范围循环 然
  • Where 子句中的 SQL Row_Number() 函数

    我发现一个问题的答案是Row Number where 子句中的函数 当我尝试一个查询时 我收到以下错误 消息 4108 级别 15 状态 1 第 1 行 窗口函数只能出现在 SELECT 或 ORDER BY 子句中 这是我尝试过的查询
  • Laravel - php artisan view:clear 有什么作用?

    我运行一个命令php artisan view clear 正如我遵循 Laravel 中自定义 404 页面的教程一样 正如所解释的 该命令清除所有编译的视图文件 进一步我在 laravel 文档中查找它 它说它从视图文件中删除缓存 我问
  • 在 kohana v3 中显示“闪现消息”的最佳方式是什么?

    我想知道最好的展示方式闪讯在 Kohana v3 中 一些教程或示例会很有帮助 你的意思是像 Kohana 2 x 的 flash 会话变量吗 最新的 Kohana 支持get once https github com kohana co
  • 无法从程序集“mscorlib”加载类型“System.Security.Principal.WindowsImpersonationContext”

    我正在创建一个 ASP NET API Core 应用程序来处理与 Oracle 数据库通信的 API 服务 在运行时 当进程尝试通过 DbContext 实体框架 使用新的 Oracle 连接连接到数据库时 会出现未处理的错误并强制应用程
  • SQL 数据读取器 - 处理空列值

    我正在使用 SQLdatareader 从数据库构建 POCO 除非在数据库中遇到空值 否则该代码将正常工作 例如 如果数据库中的 FirstName 列包含空值 则会引发异常 employee FirstName sqlreader Ge
  • 部署网站时缺少 using 指令或程序集引用错误

    我有一个网站 其中 cs 文件位于 App Code 文件夹中 在我的项目中添加类项时 VS2010 建议我创建此文件夹 我有一个使用此类的 default aspx cs 文件 我在VS2010上运行没有任何错误 但是 当我通过私人托管公
  • 找到重复元素异或运算符数组中的两个非重复元素?

    假设我有一个包含 2n 2 个元素的数组 数组中的 n 个元素出现了两次 其余两个元素是唯一的 你必须在 O n 时间和 O 1 空间内解决这个问题 解决方案之一是使用 XOR 但我无法理解这一点 任何人都可以帮助我解决这个问题或者可以给我
  • 更改声音文件的速度

    我正在寻找改变声音文件的速度 但不知道如何实现它 我假设在减慢速度的情况下必须进行某种类型的插值 但不确定如何实现加速 也许是几个样本的平均值 无论是改变节奏还是音调 目前并不重要 我想学习如何实现这两者 但至少想先完成其中一个 如果有人对
  • 如何更改32位寄存器的特定位而不更改其他位?

    我想直接使用寄存器的物理地址来操作寄存器的某些位 但是我找不到方法来做到这一点 我看到一些关于设置位掩码的帖子 但我发现它们太令人困惑了 我的寄存器物理地址是 0x4A10005C 我想操纵它的 18 16 位之间的位 我想设置0x3在那些
  • 这个模板语法“typename = T”是什么意思?

    有时我会看到这样的语法 template