首页 >后端开发 >C++ >C 模板推导如何使用偏序确定专业化?

C 模板推导如何使用偏序确定专业化?

Linda Hamilton
Linda Hamilton原创
2024-12-02 10:20:12277浏览

How Does C   Template Deduction Determine Specialization Using Partial Ordering?

模板推导中的偏序过程

偏序过程决定了C模板推导中函数模板之间的特化关系。它涉及为每个模板创建转换后的函数类型并使用它们进行比较。

  1. 转换后的函数类型:
    对于每个模板,通过替换唯一的来创建转换后的函数类型其函数类型中模板参数的类型。
  2. 匹配参数和参数:
    一个模板的转换后的函数类型与另一个模板的原始函数模板进行匹配,使用以下两种情况:

    • 转换后的 type-1 作为参数模板和原始 template-2 作为参数模板
    • 转换后的 type-2 作为参数模板,原始 template-1 作为参数template
  3. 匹配成功并排序:
    如果类型推导在任何一种情况下都能成功地将转换后的函数类型与原始函数模板匹配,则一个模板多比其他专业。如果两个方向都成功匹配,则两个模板都不会更专业。

示例:

考虑这两个函数模板:

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

template<typename T>
void foo(T const*, X<T>); // original #2

匹配变换后的types:

  • 1b vs. #2: 类型推导无法匹配参数。

  • 2b vs. #1: 类型推导可以匹配参数 ( T = 字符常量*,U = X)。

结论:重载 #2 比 #1 更专业。

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn