首页 > 编程语言 > 详细

c++之模板

时间:2016-05-07 18:09:17      阅读:193      评论:0      收藏:0      [点我收藏+]
1. 函数模板

普通函数

void Swap(int &, int &);

模板函数

template <typename T>

void Swap(T &, T &);

显示具体化,下面两个等价

template<> void Swap<int>(int &, int &);

template<> void Swap(int &, int &);

注意:具体化将覆盖模板函数,普通函数将覆盖具体化和模板函数。

 

显式实例化函数

template void Swap<int>(int &, int &);

注意:在同一编程单元中使用同一种类型的显式实例和显示具体化将出错。

 

2.类模板

多参数类型

template <typename T1, typename T2>

class Pair

{

private:

  T1 a;

  T2 b;

};

 

默认类型模板参数

template <typename T1, typename T2 = int>

class Topo

{};

类模板类型参数提供默认值,但不能为函数模板参数提供默认值。

 

模板具体化

1.隐式实例化

A<int> *temp; 不会生成类的隐式实例化

temp = new A<int>; 生成类的定义

 

2.显式实例化

声明必须位于模板定义所在的名称空间中,

template class A<string, 100>;

 

3.显式具体化

通用的模板

template <typename T>

class SortedArray

{};

具体化

template <> class SortedArray<char *>

{};

 

4.部分具体化

普通模板

template <typename T1, typename T2>

class Topo

{};

部分具体化

template <typename T1> class Topo<T1, int> {};

 

3.模板类和友员

非模板友员

template <typename T>

class hasFriend

{

  friend void counts();

  friend void report(HasFriend<T>&);

}

模板类的约束模板友元函数

template <typename T> void counts();

template <typename T> void report(T &);

 

template <typename TT>

class hasFriend

{

  friend void counts<TT>();

  friend void report<>(HasFriend<TT>&);

}

模板类的非约束模板友元函数

template <typename T>

class ManyFriend

{

  template <typename C, typename D> friend void show2(C &, D &);

};

 

c++之模板

原文:http://www.cnblogs.com/kaishan1990/p/5468811.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!