Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 部分类专门化只是编写完全专门化的另一种方式吗?_C++_Templates - Fatal编程技术网

C++ 部分类专门化只是编写完全专门化的另一种方式吗?

C++ 部分类专门化只是编写完全专门化的另一种方式吗?,c++,templates,C++,Templates,这两个专业在本质上做相同的事情吗 //generic: template<class T> struct A{ ... } template<class T> struct A<int>{ ... } template<> struct A<int>{ ... } //通用: 模板 结构A{ ... } 模板 结构A{ ... } 模板 结构A{ ... } 也就是说,在我看来,任何部分专业化都可以重写为完

这两个专业在本质上做相同的事情吗

//generic:
template<class T>
struct A{
  ...
 }

template<class T>
struct A<int>{
  ...
 }

template<>
struct A<int>{
  ...
 } 
//通用:
模板
结构A{
...
}
模板
结构A{
...
}
模板
结构A{
...
} 

也就是说,在我看来,任何部分专业化都可以重写为完全专业化。

不,不是。在图灵焦油坑中,每一种足够强大的编程技术都是等价的

template<typename A, typename B>
struct foo:std::false_type {};
template<typename T>
struct foo<T,T>:std::true_type {};
我们在多个类型参数上匹配一个参数,并提取它们


部分专门化是对第一个接口有效的参数进行模式匹配的游戏。

我希望编译器对第二个定义发出错误消息(因为未使用
T
)。我假设每个分区模板本身就是它自己的类,与初始泛型类的成员没有内部关系,对吗?@Fellowshee:是的,每个专门化都是一个完全独立的类。它们之间的唯一关系是相同的名称可以选择任何专门化(取决于参数)。
template<typename T>
struct foo<T,std::vector<T>>:std::integral_constant<int, 7> {};
template<typename T>
struct is_func_signature : std::false_type {};

template<typename R, typename... Args>
struct is_func_signature< R(Args...) >: std::true_type {};