模板的编译模型:
  应该将类定义和函数声明放在头文件中,而普通函数和类成员函数的定义放在源文件中。要进行模板的实例化,便一起必须能访问定义模板的源代码。
  1、包含编译模型
//utlities.h
#ifndef UTLITIES_H
#define UTLITIES_H

template<class T> int compare(const T&,const T&);
#include "utilites.c"
#endif   //end of utlities.h

//utlities.c
#include "utlities.h"

template<class T>int compare(const T&v1,const T&v2)
{
 if( v1<v2 )
 {
  return -1;
 }
 if( v2<v1 )
 {
  return 1;
 }
 return 0;
}         
//other definetions

这种策略使我们能够保证头文件和实现文件的分离,也保证了编译时使用模板代码能看到两种文件.

2、分别编译模型
可以使用export关键字让便一起知道要记住给定的模板定义。
export能够指明给定的定义可能会需要在其他文件中产生实例化,一个模板只能定义为导出一次,且不能在模板声明中出现export

export template<typename Type>
Type Sum(Type t1,Type t2)
如果头文件中的类定义体使用了export,则该头文件只能被程序中的一个源文件使用
//class template header goes in shared header file
template<class Type> class Queue{//...};
//Queue.c   implementation file declared Queue as export
export template<class Type> class Queue;
#include "Queue.h"
导出类的成员将自动声明为导出,也可以将类模板的个别成员声明为导出的

非类型形参的模板实参:
template<int i,int wid>
class Screen
{
 public:
  Screen():Screen(hi*wid,'#'),cursor(0),height(hi),width(wid){}
 private:
  string screen;
  string::size_type cursor;
  string::size_type height,width;
};

该模板有两个非类型形参,使用Screen类型时序显示声明为Screen<24,80>
非类型模板实参必须是编译时常量表达式

类模板的友元声明:
template<class Type>class Bar
{
 friend class FooBar;
 friend void fun();    //非模板类或模板函数为类模板的友元
 template<class T>friend class Foo1;
 template<class T>friend void temp_fcn1(const T&);
 //友元可以是类模板或函数模板
};
类也可以只授予对特定实例的访问权
template<class T>class Foo2;
template<class T>void temp_fcn2(const T&);
tempalte<class Type>class Bar;
{
 friend class foo2<char *>;
 friend class temp_fcn2<char *>(char *const &);
 friend class Foo2<Type>;
 friend class temp_fcn2<Type>(const Type &);
};
Foo2是类模板,由原关系只扩充到Foo2的形参类型为char *的特定实例。只有与给定Bar实例有相同模板实参的那些Foo2或temp_fcn版本是友元,因此Foo3<int>可以访问Bar<int>的私有部分,但不能访问Bar<string>或者任意其他Bar实例的私有部分

如果友元类是普通类(不是模板类)则可以不事先声明,反之就需要声明
template<class T>class A;
template<class T>
class B
{
 public:
  friend class A<T>;    //ok,A is known to be a template
  friend class C;       //ok,C must be an ordinary nontempalte class
  template <class S> friend class D;   //ok,D is a template
  friend class E<T>;    //error,E wasn't declared as a template
};

读书笔记--模板(2)相关推荐

  1. 读书笔记--模板与泛型编程

    了解隐式接口和编译期多态 编译期多态和运行期多态 运行期多态就好比是virtual函数再运行的时候才确定该virtual函数该被绑定为哪个函数,运行的时候才确定函数类型. 编译期多态就好比是泛型编程和 ...

  2. 读书笔记--模板(3)

    成员模板: 成员模板不能为虚 template<class Type> class Queue {     public:   template<class It>   Que ...

  3. 读书笔记--模板(1)

    函数模板时独立于子类型的函数,可作为一种方式.产生函数的特定类型版本,使用函数模板时,编译器会推断那个模板实参,一旦编译器确定了实际的模板实参,就称它实例了函数模板的一个实例.   inline 说明 ...

  4. 高效能沟《关键对话》读书笔记PPT模板-优页文档

    模板介绍 高效能沟<关键对话>读书笔记PPT模板-优页文档.一套,教育培训,读书笔记,幻灯片模板,内含青色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带 ...

  5. 《高效能人士的7个习惯》读书笔记PPT模板

    模板介绍 <高效能人士的7个习惯>读书笔记PPT模板.一套读书笔记幻灯片模板,内含橙色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示:本 ...

  6. 《照着做,你就是最能干的人》读书笔记PPT模板

    模板介绍 <照着做,你就是最能干的人>读书笔记PPT模板.一套读书笔记幻灯片模板,内含蓝色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示 ...

  7. 《罗辑思维》读书笔记PPT模板

    模板介绍 <罗辑思维>读书笔记PPT模板.一套读书笔记幻灯片模板,内含橙色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示:本资源使用PP ...

  8. 《高效学习7堂课》读书笔记PPT模板

    模板介绍 <高效学习7堂课>读书笔记PPT模板.一套读书笔记幻灯片模板,内含红色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示:本资源使 ...

  9. 《每天最重要的2小时》读书笔记PPT模板

    模板介绍 <每天最重要的2小时>读书笔记PPT模板.一套读书笔记幻灯片模板,内含蓝色多种配色,风格设计,动态播放效果,精美实用. 希望下面这份精美的PPT模板能给你带来帮助,温馨提示:本资 ...

最新文章

  1. TensorFlow文本情感分析实现
  2. EL:固氮能力主要取决于物种分类而不是土壤养分
  3. 苏宁云仓投入使用,此时物流爆发是否来得及?
  4. 在 Inno Setup 中实现倒数N秒后激活按钮
  5. 转:数学之美番外篇:平凡而又神奇的贝叶斯方法 收藏
  6. 云炬随笔20180613
  7. 网站使用微信扫码登录流程
  8. Caused by: org.springframework.amqp.AmqpException: No method found for class [B
  9. retain、strong、weak、assign区别
  10. 深入浅出组合逻辑电路(3)常见的几种编码器
  11. Swift3 Scanner用法之判断是否数字、提取字符串里的数字
  12. spring 集成mybatis——多数据源切换(附带定时器的配置)
  13. vscode保存react时标签出现空格自动换行报错
  14. sublime快捷键设置
  15. python网站设计中接口的作用_python接口自动化(三)--如何设计接口测试用例(详解)...
  16. Openwrt netifd ubus解析
  17. 《天勤数据结构》笔记——使用两个栈实现共享栈实现(C/C++)
  18. c4d流体插件_C4D流体烟雾模拟插件TurbulenceFD C4D v1.0.1437中文版流体
  19. PHP微信小程序生成带参二维码getwxacodeunlimit
  20. 华为云文字识别服务关键技术、能力和产品落地需要注意的事宜(OCR系列二)

热门文章

  1. disconf启动流程
  2. html如何添加本地视频播放,怎样在网站上添加视频?-MetInfo帮助中心
  3. texstudio的配置文件以及更改texstudio主题
  4. 软件项目管理--复习资料
  5. php毕业设计新生报到管理系统
  6. 程序员的求爱日:比1024多一点,1025,要你爱我!
  7. sharding-jdbc什么情况select会走主库
  8. YOLOV5报错解决办法
  9. php iconv_strlen,iconv详解
  10. MFC编程 -- 浮点数与字符串之间转换