大龙的博客

常用链接

统计

最新评论

模板特化,全特化,偏特化,全部特化,部分特化的含义 ------------ 转

这几个名词真是把人搞混了(是因为有的著作,甚至名著以讹传讹),我最近整理了以下,看看大家的意见如何。

模板特化:任何针对模板参数进一步进行条件限制设计的特化版本。《泛型思维》

全特化就是全部特化,即针对所有的模板参数进行特化。《c++ primer》
偏特化就是部分特化,即针对部分模板参数进行特化。《c++ primer》

全特化偏特化的定义不是很严格,所以有的时候不容易让人理解。

举例如下:
template<class U,class T>
class C{};
全特化:
template<>
class C<int,char>{};
偏特化:
template<class U>
class C<U,int>{};
大家应该对上面的例子应该没有什么异议吧。

再看下面的一个例子:
template<class T,class U>
class C<T*,U*>{};
这属于全特化还是偏特化呢?一般大部分人都认为是偏特化,但是按照上面的定义似乎应该是全特化(所有的模板参数都特化了呀)。

我觉得没有必要在名词上作口舌之争,全特化也好,偏特化也好,只要我们掌握它的意义即可。折中的来看,我认为就可以称之为模板特化,毕竟它符合模板特化的含义。

顺便说一下:《c++ primer》这本书没有很好的说明全特化偏特化的含义,造成很多的歧义,我对这个问题也是迷茫了好久。

规范的原文是这样的:

The standard term explicit specialization refers to a language feature that we call full specialization instead. It provides an implementation for a template with template parameters that are fully substituted: No template parameters remain. Class templates and function templates can be fully specialized. So can members of class templates that may be defined outside the body of a class definition (i.e., member functions, nested classes, and static data members).

posted on 2009-02-06 20:22 大龙 阅读(2856) 评论(1)  编辑 收藏 引用

评论

# re: 模板特化,全特化,偏特化,全部特化,部分特化的含义 ------------ 转[未登录] 2014-04-19 20:24 noname

template<class T,class U>
class C<T*,U*>{};
这属于全特化还是偏特化呢?一般大部分人都认为是偏特化,但是按照上面的定义似乎应该是全特化(所有的模板参数都特化了呀)。
这种属于偏特化而非特化  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理