美文网首页
C++模板小结

C++模板小结

作者: ColeWang | 来源:发表于2017-09-24 15:56 被阅读0次

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

相关文章

  • C++模板小结

    C++中突出的特性之一就是代码重用,而模板在其中发挥了重要的作用,STL也是依托于C++模板而实现的最为广泛和有用...

  • Geekband C++ 第五周

    概述 C++模板简介 函数模板 C++类模板 操作符重载 泛型编程 容器

  • 【C++】面向对象之C++模板-005

    第五章 C++模板 5.1 模板概论 c++提供了函数模板(function template.)所谓函数模板,实...

  • GeekBand STL与泛型编程 第一周

    1.模板观念与函数模板 课程主要内容 C++模板简介 泛型编程 容器 进阶 C++模板简介   generic t...

  • C++ STL(1)

    C++ STL(1) from my csdn blog C++标准模板库 容器C++标准模板库提供了10种容器基...

  • C++模板类型推导

    模板是C++的重要特性,是C++标准模板库的基础。模板可以根据数据类型自动生成代码,大大减少重复代码。模板实例化的...

  • 注释代码使用模板

    c/c++模板 或者

  • C/C++中如何获取数组和指针的长度

    获取数组长度 算术表达式 函数模板参数自动推断 标准C++模板库 模板特化与自动类型推断 Visual C++编译...

  • C++基础一文通(五)泛型 / 模板

    C++另一种编程思想称为 ==泛型编程== ,主要利用的技术就是模板 C++提供两种模板机制:函数模板和类模板 一...

  • C++11 模板元编程 - 后记

    当1994年,Erwin Unruh在C++标准委员会上演示了通过C++模板在编译期计算素数的程序后,C++模板元...

网友评论

      本文标题:C++模板小结

      本文链接:https://www.haomeiwen.com/subject/xjkkextx.html