C++模板的学习笔记

Posted songyuc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++模板的学习笔记相关的知识,希望对你有一定的参考价值。

1. 函数模板

1.1 模板参数

模板参数的确定顺序:

  1. 显式指定
  2. 隐式推导
  3. 默认类型

1.1.1 函数模板特化

特化示例:template void fun(int) / template void fun(int)

Note
template关键字不能省略。

2. 类模板

2.2 偏特化有点类似于“模板式的函数重载”

3. Q&A

(1)C++中的模板和宏展开本质上是相同的吗?

不是。C++中的模板和宏展开是不同的两种实现机制。模板是在编译时进行代码生成,并在类型确定时编译;而宏展开是在预处理时进行代码替换,而不进行类型检查。

(2)C++的STL库的实现有使用到“类模板特化”吗?

是的,C++的STL库使用了类模板特化的技术。例如,STL的vector模板类在特化std::vector时,实现了特殊的内存布局和比特级操作。此外,STL的其他组件,如std::pair,std::tuple等也使用了类模板特化技术,以支持更多的数据类型(OCP原则的应用)。

4. Notes

C++17之前(by C++11)不支持类模板的类型推导:引入辅助模板函数

例如,make_pair就是一个典型的辅助模板函数,

#include <iostream>
#include <utility>

template <typename T1, typename T2>
std::pair<T1, T2> make_pair(T1 vall, T2 val2)
return std::pair<T1, T2>(vall, val2);

int main() 
    auto x = make_pair(3,3.14);

以上是关于C++模板的学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

C++模板的学习笔记

C++模板的学习笔记

[学习笔记] 3. C++ / CPP提高

C++ 学习笔记

C++ Primer 0x10 学习笔记

蓝桥ROS机器人之现代C++学习笔记2.5 模板