首页 > 后端开发 > C++ > C 11 的偏序如何确定更专业的函数模板?

C 11 的偏序如何确定更专业的函数模板?

Susan Sarandon
发布: 2024-12-05 10:37:10
原创
705 人浏览过

How Does C  11's Partial Ordering Determine More Specialized Function Templates?

函数模板推导中的偏序

问题:

C 11 标准描述了偏序程序用于比较函数模板的特化,但其含义并不完全清楚。您能提供示例解释吗?

答案:

为了确定一个函数模板是否比另一个函数模板更专业,该标准使用部分排序过程。此过程涉及为每个模板创建转换后的函数类型,并对它们进行比较以确定哪个模板更专业。

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

对于每个模板,转换后的函数类型是通过用特定类型(称为合成类型)替换类型参数来创建的。这些合成类型是唯一的,不会在代码中的其他地方使用。

步骤 2:将转换后的类型与原始模板匹配

匹配第一个模板的转换后的函数类型与第二个模板的原始函数类型相反。然后以相反的方向重复该过程。

第 3 步:确定专业化

如果一个转换产生匹配,而另一个转换没有产生匹配,则具有匹配的模板转型被认为更加专业化。如果在任一方向都找不到匹配项,则两个模板都不会被视为比另一个更专业。

示例:

考虑两个函数模板:

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

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

将 #1b (void foo(int, bool)) 的转换函数类型与 #2 的原始函数类型进行匹配(#2) 失败。但是,将转换后的函数类型 #2b (void foo(char const*, X)) 与原始函数类型 #1 (#1) 进行匹配会成功。

因此,函数模板 #2比函数模板 #1 更专业。

附加说明:

这部分排序过程还用于比较部分类模板特化的特化。在这种情况下,该过程首先涉及为每个专业化创建虚构的函数模板,然后使用相同的规则比较这些函数模板。

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

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