Linux | c&cpp | Email | github | QQ群:425043908 关注本站

itarticle.cc

您现在的位置是:网站首页 -> 代码相关 文章内容

C++ 模板小结-itarticl.cc-IT技术类文章记录&分享

发布时间: 7年前代码相关 128人已围观返回

1.基本使用

模板使用关键字template定义,可以使用class或者typename来声明模板类型的类型名称,同时模板可以嵌套使用。例如以下的模板声明:

//引入模板类型T的class A

template <class T>

class A

{

...

};

//引入模板类型K,V以及模板类template<typename >C的class B

template<typename K, typename V, template<typename > class C>

class B

{

C<K> key;

C<V> value;

...

}

//命名冲突

class D { ... };

int p;

template<class D, int p>

void fun(D d)

{

D d1 = p; //j局部的class D与int p

::D d2 = ::p; //全局空间的class D与int p

}

引用C++ Primer Plus中的话,

知道这些模板不是类和函数定义至关重要。它们是C++编译器指令,说明了如何生成类和成员函数的定义。

通过以下代码说明这句话的含义:

int GlobalId = 0;

template<class T>

int GetGlobalId()

{

static int s_id = ++GlobalId;

return s_id;

}

GetGlobalId<int>(); //1

GetGlobalId<double>(); //2

GetGlobalId<char>(); //3

...

std::cout<<"char:"<<GetGlobalId<char>()<<std::endl;

std::cout<<"double:"<<GetGlobalId<double>()<<std::endl;

std::cout<<"int:"<<GetGlobalId<int>()<<std::endl;

...

//output:

3

2

1

从上面的程序可以看出,模板函数在参数指定的时候,会生成对应的结构体,在编译时期完成实例化(并且对应的类型只会生成一次)。

2.模板特化与偏特化

特化和偏特化的含义都很简单。特化是指对于模板中的模板类型为指定类型时采取区别的定义(实现)方式;偏特化是指对于指定部分模板类型的情况下,对于整个模板采用区别的定义(实现)方式,参考如下代码:

template<class T>

void fun1(T t)

{ ... }

//为模板类型T为char指定特化

template<>

void fun1(char t)

{ ... }

template<class A, class B>

void fun2(A a, B b)

{ ... }

//为模板类型B为char指定偏特化

template<class A>

void fun2(A a, char b)

{ ... }

note:模板类声明所有部分必选全部包含在头文件中,或者使用.h include .hpp的方式。

发布时间: 7年前代码相关128人已围观返回回到顶端

很赞哦! (1)

文章评论

  • 请先说点什么
    热门评论
    127人参与,0条评论

站点信息

  • 建站时间:2016-04-01
  • 文章统计:728条
  • 文章评论:82条
  • QQ群二维码:扫描二维码,互相交流