同一函数的模板化版本和非模板化版本是否被视为重载?

2024-02-24

一个非常正式的问题:这被认为是过载吗?删除模板与仅重载参数有根本不同吗?

template<class T> void myFunction(const T& t) {}
void myFunction(const double& t) {}

那么接下来的问题是,遵循这种方法还是使用模板专门化而不是重载更好?

template<> void myFunction(const double& t) {}

首先,根据标准(第 13 节开始):“当两个 或为单个名称指定多个不同的声明 相同的范围,该名称被认为是重载的。[...]只有函数和 函数模板声明可以重载;变量和类型 声明不能超载。”很明显,你们两个 声明是重载。

如果你打电话myFunction( 3.14159 ),那么模板将是 使用与非模板相同的签名进行实例化,并且两者都会 完全匹配。在这种情况下(§13.3.1):

给定这些定义,可行函数 F1 被定义为 如果对于所有参数,比另一个可行函数 F2 更好的函数 i,ICSi(F1) 不是比 ICSi(F2) 更差的转换序列,并且 然后 [...] — F1 是非模板函数,F2 是函数模板 专业化,[...]

该标准已指定您的具体情况。

关于专门化功能的替代方案: 根据上面的定义,专业化可能是重载,但是 他们不参与重载决策。专业工作 不同的是:重载解析首先在没有它们的情况下发生;那么,如果 重载决议选择了模板,并且有一个 实例化类型的专业化,专业化是 使用,而不是模板的通用实例化。一般来说 说起来,结果是一样的,尽管http://www.gotw.ca/publications/mill17.htm http://www.gotw.ca/publications/mill17.htm指出一种异国情调(并且 写得不好?)情况并非如此。不过,至少对我来说,似乎 更自然地提供重载函数,而不是 模板专业化。无论如何,大多数时候。 (有一个真实的 例外:有时不提供泛型很有用 实施,但仅限于专业化。根据我的经验,这 这种情况通常发生在特征类中,但也可能发生在 个人功能也是如此。当然,在这种情况下,您可以 专门化模板;否则你不能使用它。)

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

同一函数的模板化版本和非模板化版本是否被视为重载? 的相关文章

随机推荐

  • 部分和模板的复杂嵌套

    我的问题涉及如何处理复杂的嵌套模板 也叫partials 在 AngularJS 应用程序中 描述我的情况的最佳方式是用我创建的图像 正如您所看到的 这有可能成为一个相当复杂的应用程序 具有大量嵌套模型 该应用程序是单页的 因此它加载一个索
  • 开发过程中如何避免“死亡交换”?

    可能每个人在开发过程中都至少遇到过一次这个问题 while some condition here that somehow never will be false yourvector push back new SomeType 正如您
  • 滑动即可更改视图

    下面的代码容易写吗 我有一个表格视图 当用户选择一个单元格时 会加载详细视图 我希望允许用户通过向左和向右滑动来导航代表表格视图中项目的项目 详细视图 其工作方式与例如iPhone 的主屏幕 例如 滑动时 一页移出屏幕 然后出现下一页 我已
  • 解析 Boost program_options 中配置文件的未注册选项?

    使用命令行选项 我可以执行以下操作 po variables map vm auto parsedOptions po command line parser argc argv options optionsDescription1 al
  • 导入 React、{Component} 而不仅仅是 React 有什么好处?

    写作的最大好处是什么 import React Component from react class Link extends Component 代替 import React from react class Link extends
  • 在 Linux Mint 17.3 上安装 python 3.5

    我对 Linux 很陌生 想使用 python 因为它是我在学校学习的语言 我在网上查了一下我当前的版本是 2 7 这对我来说没有好处 因为我正在学习 python 3 但是 我听说更改系统 python 版本可能会非常糟糕 所以我不知道该
  • 如何与 UIActivityViewController 共享文本文件

    我尝试共享文件内容的 NSData 对象 活动视图中出现邮件选项 然后显示邮件撰写控制器 但没有附件 我尝试过与文件路径共享 NSUrl 但在这种情况下 当活动视图出现时 它会占据整个屏幕 但除了底部的 取消 按钮之外 它是空白的 诡异的
  • 使用 Ansible 停止可能不存在的服务

    我正在使用 Ansible2 6 1 我试图确保某些服务没有在目标主机上运行 问题是该服务可能在某些主机上根本不存在 如果是这种情况 Ansible 将因缺少服务而失败并出现错误 服务由Systemd 使用服务模块 name Stop se
  • 如何将 PDF 转换为文本,以便可以使用 PHP 解析该文本?

    我的 PDF 大多是简单格式的文本 我想用 PHP 解析文本 我意识到 PDF 是二进制的 因此我需要一个实用程序或库将其转换为文本 有什么建议吗 第三方软件可以转储PDF文件的文本内容 例如 xdoc2txt 仅限 Windows 在 W
  • 如何在 Angular 5 中实现无限滚动分页?

    我需要在 Angular 5 中实现无限滚动分页 我尝试过无限滚动 但它无法正常工作 我需要显示前 10 条帖子及其评论 滚动后这 10 条评论需要再次调用服务 10 条帖子 并将数据附加到现有帖子中 您可以使用ngx 无限滚动 npm i
  • 方法指针转换

    我正在为教育目的编写一个代表类 但遇到了一个小问题 委托不仅必须能够调用函数 还必须能够调用对象的成员方法 这意味着我需要存储指向方法的指针 void classname methodPtr 我需要存储指向不同类和不同参数列表的方法的指针
  • 未找到以下 ICU 库: -- i18n(必需)

    我必须构建 miktex 源代码 我从 github 安装源代码 他们给了我构建它的链接 https miktex org howto build mac https miktex org howto build mac 我按照链接中给出的
  • FancyBox 根本不工作

    我在运行 fancybox 时遇到问题 我也在运行其他一些 jquery 以下是正在运行的脚本
  • 使用 Tortoise SVN 跨 SVN 存储库移动目录

    如果两个目录都在同一个 SVN 存储库中 如何将子目录从一个目录移动到另一个目录 我正在使用乌龟SVN 选择要移动的文件夹 文件 然后右键单击它们并将它们拖动到要移动的位置 菜单将出现一个选项 SVN 将版本控制文件移至此处 正如所澄清的p
  • Android - 使用 jarsigner 签署我的 apk 时出错

    我制作了一个这样的密钥文件 C Users Alex gt keytool genkey v keystore alexkey keystore alias alexkey keyalg RSA keysize 2048 validity
  • 使用 MVEL 有什么优势?

    我正在学习jBPM引擎 我注意到它在流程设计中默认使用MVEL方言 那么问题来了 使用MVEL代替纯Java有什么优势呢 如果我开始用 Java 编写更复杂的流程 是否会遇到麻烦 jBPM 文档写道 请注意 MVEL 接受任何有效的 Jav
  • 如何将订单项自定义字段值从机会传递到销售订单?

    我在机会产品选项卡中有一个自定义行号字段 供客户对所选产品重新排序 并且网格按自定义字段值排序 我试图将机会的价值传递给也具有类似字段的销售订单 我尝试过以下代码但它不起作用 PXGraph InstanceCreated AddHandl
  • 通过 skimage.io.imread 读取的图像形状可疑

    我正在尝试使用 skimage io imread 读取 RGB 图像 但看完图片后发现图片形状不对 print img shape 表明 图像形状是 2 显示问题的完整代码是 from skimage import io img io i
  • 如何从 Pandas 数据框中删除行列表?

    我有一个数据框 df gt gt gt df sales discount net sales cogs STK ID RPT Date 600141 20060331 2 709 NaN 2 709 2 245 20060630 6 59
  • 同一函数的模板化版本和非模板化版本是否被视为重载?

    一个非常正式的问题 这被认为是过载吗 删除模板与仅重载参数有根本不同吗 template