首页 > 后端开发 > C++ > 偏序如何决定函数模板之间的专业化?

偏序如何决定函数模板之间的专业化?

Barbara Streisand
发布: 2024-12-02 07:18:12
原创
780 人浏览过

How Does Partial Ordering Determine Specialization Between Function Templates?

模板推导中的偏序过程

模板推导中的偏序过程决定了两个函数模板之间的特化关系。它涉及两个阶段:

第 1 阶段:转换

对于每个模板,部分排序过程通过替换所有类型、非类型来创建“转换后的函数类型” ,以及具有独特、未使用类型的模板模板参数。

第 2 阶段:比较

转换后的函数类型以两种方式进行比较:

  • 前向匹配:模板 1 的转换后函数类型与原始函数类型进行匹配模板2的函数类型
  • 向后匹配:转换后的函数类型模板 2 与模板 1 的原始函数类型进行匹配。

如果其中一个匹配成功而另一个匹配失败,则匹配成功的模板被认为更专业。如果两个匹配都不成功,则两个模板都不是更专业。

示例:

考虑以下两个函数模板:

template<typename T, typename U>
void foo(T, U); // Template 1

template<typename T>
void foo(T const*, X<T>); // Template 2
登录后复制

确定哪个模板更专业,我们:

1。创建转换后的函数类型:

  • 转换后的模板 1:void foo(int, bool)
  • 转换后的模板 2:void foo(char const*, X)

2。比较转换后的函数类型:

  • 正向匹配:void foo(int, bool) 无法匹配 void foo(T const*, X)。
  • 向后匹配: void foo(char const*, X) 可以通过以下方式与 void foo(T, U) 匹配推导 T = char const* 和 U = X

结论:模板 2 比模板 1 更专业。

以上是偏序如何决定函数模板之间的专业化?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板