C++模板小结

C++中突出的特性之一就是代码重用,而模板在其中发挥了重要的作用,STL也是依托于C++模板而实现的最为广泛和有用的工具库。模板所涉及到的知识比较杂,简单总结如下,以便日后温习。

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的方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,088评论 19 139
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy阅读 13,154评论 1 51
  • C++ 模板简介 一、模板 使用模板的目的就是能够让程序员编写与类型无关的代码。 模板是一种对类型进行参数化的工具...
    MinoyJet阅读 7,077评论 0 12
  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,522评论 9 118
  • 01、垃圾,是放错位置的珍宝。敌人,是站错立场的朋友。 02、当有些人一出生就有的东西,我们要为止奋斗几十年才拥有...
    秘蜜阅读 3,882评论 0 4

友情链接更多精彩内容