【问题标题】:how is template class matched模板类如何匹配
【发布时间】:2016-08-17 21:00:46
【问题描述】:

我尝试理解enable_if 实现,它是一对模板类。我不明白,为什么enable_if<true, int> 与第一个不匹配?这是怎么决定的?

#include <iostream>

template <bool, class T = void>
struct enable_if
{
    enable_if() { std::cout << "invalid type";}
};

template <class T>
struct enable_if<true, T>
{
  typedef T type;
  enable_if() { std::cout <<"valid type";}
};

int main(){
    enable_if<0==0, int> example; // print "valid type"
    return 0;
}

【问题讨论】:

  • 最适合和其他东西。如果可以选择显式特化,则可以,否则默认为基本模板。

标签: c++ templates c++11 template-classes


【解决方案1】:

有两个步骤。

  1. 我们匹配主要类模板:enable_if&lt;true, int&gt; 匹配 enable_if&lt;bool, T&gt;。如果主节点上有任何默认参数,我们将在此时填充它们。
  2. 我们列举了所有匹配的主要类模板的特化,这将是:
    一种。 enable_if&lt;bool, T&gt;,与 bool=trueT=int
    湾。 enable_if&lt;true, T&gt;,与T=int

    我们通过称为部分排序的过程选择最专业的专业化,您可以非正式地将其视为选择最具体的一个。在这种情况下,(2b) 比 (2a) 更具体,因为所有 (2b) 实例化都可以匹配 (2a) 但不能反向匹配,所以我们选择那个。

因此,您最终会得到 enable_if&lt;true, T&gt;T=int 的实例化。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多