模板特化,全特化,偏特化,全部特化,部分特化

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

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

全特化就是全部特化,即针对所有的模板参数进行特化。《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).


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zade/archive/2005/12/06/544731.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值