定义函数模板特化的正确语法是什么?

2023-12-02

在 C++ Primer Plus(2001,捷克语翻译)中,我发现了这些不同的模板专业化语法:

函数模板

template <typename T> void foo(T);

专业化语法

void foo(int param); // 1
void foo<int>(int param); // 2
template <> void foo<int>(int param); // 3
template <> void foo(int param); // 4
template void foo(int param); // 5

谷歌搜索了一下,我只找到了第三个例子。它们之间(调用、编译、使用)有什么区别吗?其中一些是否已过时/已弃用?为什么不直接使用No.1呢?


以下是每种语法的注释:

void foo(int param); //not a specialization, it is an overload

void foo<int>(int param); //ill-formed

//this form always works
template <> void foo<int>(int param); //explicit specialization

//same as above, but works only if template argument deduction is possible!
template <> void foo(int param); //explicit specialization

//same as above, but works only if template argument deduction is possible!
template void foo(int param); //explicit instantiation

我添加的:

//Notice <int>. This form always works!
template void foo<int>(int param); //explicit instantiation

//Notice <>. works only if template argument deduction is possible!
template void foo<>(int param); //explicit instantiation

从编码的角度来看,重载优于函数模板专业化。

因此,不要专门化函数模板:

  • 为什么不专门化函数模板?
  • 模板专业化和重载

并了解术语:

  • 实例化
  • 显式实例化
  • 专业化
  • 明确的专业化

看看这个:

  • C++ 模板中实例化和专门化之间的区别
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定义函数模板特化的正确语法是什么? 的相关文章

随机推荐

  • 更改 Android 启动器图标,如 Instagram/Todoist

    在 Instagram 周年纪念日 用户可以更改应用程序图标 即使此功能不再可用 Todoist 也有此功能的类似工作实现 我研究了如何实现这一目标并运行了第二个答案 更改应用程序图标 但这个解决方案似乎有我不想要的缺点 其中一些列在注释下
  • 无法使用 Gmail SMTP 设置在 Joomla 中发送电子邮件。出现 SMTP 服务器错误:5.5.1 需要身份验证。如何解决这个问题?

    我的 joomla 联系表单 gmail SMTP 设置不起作用 请参阅下面提交联系表单时显示的消息 应该是什么原因呢 Extension php openssl dll 也启用了 错误信息 SMTP 服务器错误 5 5 1 需要身份验证
  • Sybase ASE 15 字符串聚合函数

    我正在寻找一种方法将来自不同行的字符串聚合到 sybase ASE 15 中的一行中 如下所示 id Name Result id Names 1 Matt 1 Matt Rocks 1 Rocks 2 Stylus 2 Stylus 类似
  • 我对 JavaScript 中的关键字“this”感到困惑

    这是一个例子 function one var a 1 two function two var b 2 three function three var c 3 alert a b c 6 one calling the function
  • ggplot2 中的自定义轴刻度标签

    我想展示一个简短的时间序列 显示 22 年来欧洲海洛因缉获量的异质性 然而 某些年份包含不同数量的国家 我想通过在 x 轴上放置每年的 n xx 来在图表中显示这一点 有谁知道我应该怎么做 across time lt ggplot by
  • Dropwizard集成测试找不到资源文件

    对于 dropwizard 来说非常陌生 我正在尝试 完全 创建一个集成测试 以他们为例 https dropwizard github io dropwizard manual testing html public class Logi
  • C# 中的泛型类型推断如何工作?

    如果我有以下代码 private BaseMessage getMessage return new OtherMessage private void CheckType
  • Hangfire VB 启动抛出 SQL 异常

    See 这个 StackOverflow 问题一些背景 Hangfire 看起来对我来说是正确的解决方案 但我在让它发挥作用时遇到了困难 我的开发环境是VB 2010和SQL 2005 不是最新的工具 Public Sub Configur
  • 比较c中字节数组中的任意位序列

    我的 c 代码中有几个 uint8 t 数组 我想将一个数组中的任意序列位与另一个数组进行比较 例如 我有 bitarray 1 和 bitarray 2 我想将 bitarray 1 的位 13 47 与 bitarray 2 的位 5
  • 嵌套 SQL 查询是原子的吗?

    我有一些微服务 几乎 系统 其中每个程序都有自己的端口 此外 并非系统中的所有端口都可用 为简单起见 我决定在 PostgreSQL 的表中保留空闲端口列表 因此 我有这张表 service port sm srv 5600 null 56
  • 在 Swift 中将整数转换为罗马数字字符串

    我正在寻找一个Integer在 Swift 中并将其转换为罗马数字String 有任何想法吗 人们可以写一个扩展Int 与下面看到的类似 请注意 对于小于 1 的数字 此代码将返回 虽然这对于罗马数字来说可能没问题 零不存在 但您可能希望在
  • 使特定用户的会话无效

    因此 对于我的网络应用程序 如果我删除当前登录的用户 并且我想使他 她的会话无效 这样 一旦他 她刷新页面或导航 他们就不再登录 我现在的方式是 如果用户成功登录 我会将用户对象存储在我的SessionScoped豆 并存储HttpSess
  • 聊天客户端表情窗口JAVA

    我一直在致力于创建一个聊天客户端 java swing 并且我刚刚使我的表情符号完全可用 但除了让用户输入 之外 例如 我想提供一个包含所有可用表情符号的弹出窗口 我正在寻找的是一种制作这样一个窗口的方法 例如像 Skype 的那样 我可以
  • 在多个节点实例中共享 IO 对象

    我想在两个节点实例之间共享由 socket io 创建的房间 已经使用 redis store 但无法在不同的节点实例上获取 io sockets in ROOM ID emit MESSAGE DATA 我在尝试 实例A io set s
  • C中的宏如何分配内存?

    我想知道C中的内存是如何分配给 define变量的 define VAR1 10 我有 2 个问题 VAR1 的类型是什么 VAR1 存储在哪个内存段中 VAR1 存储在哪个内存段中 在任何一个细分市场中 VAR1仅在预处理阶段相关 在运行
  • HTML 创建等大小的方形网格图片系统

    如何创建具有相同大小的正方形垂直和水平对齐的图片网格系统 下面是一个 2 x 2 的图片系统 由于某种原因 图像未对齐 如果需要的话 我希望能够稍后自定义正方形 使它们成为具有特定尺寸的矩形 也喜欢使用引导程序
  • Android DOM 解析器 - 从描述标签检索图像链接

    我正在使用 DOM 解析器来解析此 XML feed http loc grupolusofona pt index php format feed 我的解析器对所有标签都工作得很好 我只是缺少能够从描述标签中检索图像的想法 feed 上的
  • 图像的路径和扩展

    我想从iPhone设备获取相册图像的路径a 我还需要该图像的扩展名和他们的名字 newFilePath NSHomeDirectory stringByAppendingPathComponent textFieldNormalFile n
  • 自定义 ItemTemplate 未显示在 Visual Studio 2010 中 - 添加新项

    我之前在 VS2005 2010 中创建过 ItemTemplates 从来没有遇到过任何问题 在 Windows8 上使用 VS 2012 Ultimate 版本时 我正在创建的 ItemTemplate 未显示在 添加新项 列表中 仅尝
  • 定义函数模板特化的正确语法是什么?

    在 C Primer Plus 2001 捷克语翻译 中 我发现了这些不同的模板专业化语法 函数模板 template