模板的编译模型:
  应该将类定义和函数声明放在头文件中,而普通函数和类成员函数的定义放在源文件中。要进行模板的实例化,便一起必须能访问定义模板的源代码。
  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. 怎样用python画雪花_python使用turtle库与random库绘制雪花
  2. Ubuntu 误改/etc/sudoers 文件权限
  3. cocos2d-x初探学习笔记(12)--图形绘制
  4. java面试题十九 判断题
  5. SAP Spartacus里product数据请求的HTTP url是在哪里维护的
  6. Spring Batch示例教程
  7. 基于ARM IP的看门狗设计与功能验证
  8. Java笔记(1)黑马刘意_Java入门_2019_idea版
  9. 深度学习之MNIST数据集
  10. kafka7 探索生产者同步or异步发送消息
  11. 【包邮送书活动】20210928期-开奖通知
  12. 005_软件安装之_常用办公软件
  13. 接受数据的php文件源码,PHP文件上传源码分析(RFC1867)
  14. 使用JS完成首页定时弹出广告图片
  15. < Linux > 守护进程
  16. 【毕设选题推荐】机器人工程专业毕设选题推荐
  17. 威纶通触摸屏如何编写和调用宏指令进行逻辑判断
  18. 如何利用Arduino和TFT LCD操控NeoPixel LED灯条
  19. Java项目:停车位租赁系统(java+SSM+JSP+Maven+mysql)
  20. visual studio .vcxproj

热门文章

  1. 计算机函授本科学制,成人高考函授本科是什么,函授本科要多久毕业?函授学制是几年的?...
  2. 笔记本不能上网的原因和维修方法
  3. 网页设计作业花甲美食网站设计——精美花甲美食网页(8页) 海鲜网页制作作业 生鲜水果蔬菜网页设计模板 简单学生网页设计代做 静态HTML CSS网站制作成品
  4. 35岁以上的大龄测试员们,后来都干什么去了?
  5. 08_树莓派安装Qt开发环境
  6. linux查看服务器是master,master
  7. 转别人做猎头之感受:做猎头让我很有成就感
  8. [ESXi]各种ID:WID/LWID/CID/GID
  9. 汇编语言学习笔记-整数的加减乘除等指令
  10. C语言实现 猴子吃桃子问题 超级详解