当前位置: 编程技术>c/c++/嵌入式
C++模板之特化与偏特化详解
来源: 互联网 发布时间:2014-10-29
本文导语: 前言 说到C++模板,这个已经不是什么新东西了,自己在实际开发中也用过;对于C++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确...
前言
说到C++模板,这个已经不是什么新东西了,自己在实际开发中也用过;对于C++模板特化和偏特化,对于别人来说,已经不是什么新东西了,但是对于我来说,的确是我的盲区,那天在群里讨论这个问题,自己对于这部分确实没有掌握,又联想到在《STL源码剖析》一书中,对于此也是有着介绍。所以,今天就对此进行详细的总结,以备后忘。
C++模板
说到C++模板特化与偏特化,就不得不简要的先说说C++中的模板。我们都知道,强类型的程序设计迫使我们为逻辑结构相同而具体数据类型不同的对象编写模式一致的代码,而无法抽取其中的共性,这样显然不利于程序的扩充和维护。C++模板就应运而生。C++的模板提供了对逻辑结构相同的数据对象通用行为的定义。这些模板运算对象的类型不是实际的数据类型,而是一种参数化的类型。C++中的模板分为类模板和函数模板。
类模板如下:
代码如下:
#include
using namespace std;
template
class TClass
{
public:
// TClass的成员函数
private:
T DateMember;
};
函数模板如下:
代码如下:
template
T Max(const T a, const T b)
{
return a > b ? a : b;
}
模板特化
有时为了需要,针对特定的类型,需要对模板进行特化,也就是所谓的特殊处理。比如有以下的一段代码:
代码如下:
#include
using namespace std;
template
class TClass
{
public:
bool Equal(const T& arg, const T& arg1);
};
template
bool TClass::Equal(const T& arg, const T& arg1)
{
return (arg == arg1);
}
int main()
{
TClass obj;
cout