1. 类模板的部分特例化(partial specialization)

类模板的特例化不必为所有模板参数提供实参(可以只指定一部分而非所有模板参数, 或是参数的一部分而非全部特性)。类模板的部分特例化本身是一个模板, 使用它时用户还必须为那些在特例化版本中未指定的模板参数提供实参。

1.1

//原始的、 最通用的版本
template <class T> struct remove_reference {typedef T type;
};// 部分特例化版本, 将用于左值引用和右值引用
template <class T> struct remove_reference<T &> // 左值引用
{  typedef T type;
};template <class T> struct remove_reference<T &&> // 右值引用
{ typedef T type;
};

三个变量 a、 b 和 c 均为 int 类型。

int i;
//decltype(42)为int, 使用原始模板
remove_reference<decltype(42)>::type a;//decltype (i)为int&, 使用第一个(T&) 部分特例化版本
remove_reference<decltype(i)>::type b;//decltype(std::move(i))为int &&, 使用第二个即T&&)部分特例化版本
remove_reference<decltype(std::move(i))>::type c;

2. 特例化成员而不是类

可以只特例化特定成员函数而不是特例化整个模板

template <typename T> struct Foo {Foo(const T &t = T()):mem(t){ }void Bar(){ /*...*/ }T mem;// Foo 的其他成员
}//特例化一个模板
template<> void Foo<int>::Bar() //特例化 Foo<int>的成员 Bar
{//进行应用于int的特例化处理
}Foo<string> fs;//实例化 Foo<string>::Foo( )
fs.Bar();// 实例化 Foo<string>::Bar( )
Foo<int> fi; //实例化 Foo<int>::Foo( )
fi.Bar();//使用我们特例化版本的 Foo<int>::Bar( )

C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板部分特例化相关推荐

  1. C++ Primer Plus 笔记(16章:string类和标准模板库)

    16 string类和标准模板库 16.1 string类 16.1.1 构造字符串 常见的字符串书中给了7个,另外还有两个在C++11里新增的(NTBS)表示以空字符结束的传统字符串 构造函数 描述 ...

  2. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板成员函数的实例化

    1. 默认情况下,一个类模板的成员函数只有当程序用到它时才进行实例化. (即使某种类型不能完全符合模板操作的要求(参见9.2节,第294页),我们仍然能用该类型实例化类todo). eg. //实例化 ...

  3. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板定义

    1. 定义 类似函数模板,类模板以关键字template开始,后跟模板参数列表.在类模板(及其成员)的定义中,我们将模板参数当作替身,代替使用模板时用户需要提供的类型或值: template < ...

  4. C++Primer Plus笔记——第十六章 string类和标准模板库总结及程序清单

    目录 本章小结 程序清单 string类 16.1 str1.cpp                16.2 strfile.cpp            16.3 hangman.cpp      ...

  5. 模板类成员函数特例化写法

    现象: vs编译出现错误,即对函数ReleaseByOwner()进行了重定义: 解决: 先说一下我的开发背景: 原因: 在文件calibdt_array.h中定义了类Array,并声明了类内函数Re ...

  6. C++模板与泛型编程:模板特例化

    文章目录 模板特例化 定义函数模板特例化 函数重载与模板特例化 类模板特例化 类模板部分特例化 特例化成员而不是类 模板特例化 ​ 编写单一模板,使之对任何可能的模板实参都是最合适的,都能实例化,这并 ...

  7. C++函数模板和模板函数、类模板和模板类

    这期间有涉及到函数模板与模板函数,类模板与模板类的概念 (类似于类与类对象的区别) 注意:模板类的函数声明和实现必须都在头文件中完成,不能像普通类那样声明在.h文件中,实现在.cpp文件中. 1.函数 ...

  8. C++模板学习02(类模板)(类模板语法、类模板与函数模板的区别、类模板中的成员函数创建时机、类模板对象做函数参数、类模板与继承、类模板成员函数类外实现、类模板分文件编写、类模板与友元)

    C++引用详情(引用的基本语法,注意事项,做函数的参数以及引用的本质,常量引用) 函数高级C++(函数的默认参数,函数的占位参数,函数重载的基本语法以及注意事项) C++类和对象-封装(属性和行为作为 ...

  9. C++ Primer 5th笔记(chap 16 模板和泛型编程)类模板特例化

    1. 定义一个特例化版本, 模板参数为 Sales data // 打开std 命名空间, 以便特例化 std::hash namespace std {template struct hash< ...

最新文章

  1. 2021年春季学期-信号与系统-第一次作业参考答案-第二题
  2. 以local模式使用Xshell+Xmanager远程监控jvisualvm
  3. Java队列 Deque
  4. android.view.WindowManager$BadTokenException: Unable to add window — token null
  5. Field EXP_REVENUE
  6. 第一次参加学校的ACM比赛所学及感想
  7. android 全局hook_【Hook】实现无清单启动Activity
  8. 江西小学计算机说课稿,2019江西教师招聘面试-小学数学-说课稿
  9. 前端技术面——(js基础二)
  10. java se 1335,1335.逼退法王
  11. java B2B2C 源码多租户电子商城系统-Spring Cloud整合Netflix Archaius介绍
  12. 网友刷屏:秃了秃了!黑马Java项目教程上新
  13. mysql 锁机制与原理详解
  14. 什么是全景(360全景、720全景、VR全景)?
  15. “90后”男子酒后乱性强奸醉酒女获刑3年
  16. 3dMax夜晚行车灯光轨迹一键生成插件TrafficTrails使用教程
  17. WARN Error while fetching metadata with correlation id 5 : {testtopic=LEADER_NOT_AVAILABLE}
  18. GPS北斗卫星授时设备(京准)
  19. byte的取值范围为啥是[-128~127](超详细教学,建议收藏)
  20. 中央机关及其直属机构2007年考试录用公务员公告

热门文章

  1. 多线程:当你提交任务时,线程队列已经满了,这时会发生什么?
  2. android 截长图 方法,Android实现截屏与截长图功能
  3. python怎么用pip_python怎么使用pip工具
  4. 冷却负载、人为因素影响传统数据中心效率
  5. 光栅衍射主极大个数_光栅的分类及常规指标介绍
  6. 成功解决Runtime Error Selected KDE bandwidth is 0. Cannot estiam
  7. 成功解决AttributeError: ‘int‘ object has no attribute ‘encode‘
  8. Python之pyecharts:利用pyecharts绘制2020年11月16日微博话题热度排行榜实时变化
  9. 成功解决NVIDIA安装程序无法继续  Ths OCH driver package is not conmtibIe with the currently uistalled version of
  10. AI:2020年6月22日北京智源大会演讲分享之认知神经基础专题论坛——14:20-15:00方方教授《Maps and Functions of Human Attention》