C++ 模板类是如何匹配的
我试图理解C++ 模板类是如何匹配的,c++,templates,c++11,template-classes,C++,Templates,C++11,Template Classes,我试图理解enable_if实现,它是一对模板类。我不明白的是,如果与第一个不匹配,为什么要启用?这是如何决定的 #include <iostream> template <bool, class T = void> struct enable_if { enable_if() { std::cout << "invalid type";} }; template <class T> struct enable_if<true,
enable_if
实现,它是一对模板类。我不明白的是,如果与第一个不匹配,为什么要启用?这是如何决定的
#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;
}
#包括
模板
结构启用\u如果
{
启用_if(){std::cout有两个步骤
我们匹配主类模板:enable_if
匹配enable_if
。如果主类上有任何默认参数,我们将在此时填充它们
我们列举了同样匹配的主类模板的所有专门化,即:
a、 启用_如果
,使用bool=true
和T=int
b、 启用\u如果
,使用T=int
我们通过一个称为偏序的过程来选择最专业化的专门化,你可以非正式地认为这是选择最具体的一个。在这种情况下,(2b)比(2a)更具体,因为所有(2b)实例化都可以与(2a)匹配,但不能与(2a)相反,所以我们选择了那个
因此,您最终得到一个实例化enable\u if
和T=int
Best-fit以及其他东西。如果可以选择显式专门化,则默认为基本模板。它被称为