- 一、背景设置
- 二、函数模板
- 1)函数模板
- (1)基本范例
- (2)实例化
- (3)模板参数的推断
- (3.1)常规的参数判断(四种方法)
- (3.2)各种推断的比较以及空模板参数列表的推断(编译器优先调用非模板函数,也就是普通函数)
- 2)类模板、变量模板、别名模板
- 3)类模板的有元
- 4)可变参模板
- 5)多态在模板中的应用
- 6)模板的一些特殊继承关系
- 7)模板代码的组织结构与模板的显示实例化和声明
- 补充vstudio 2019调试快捷键
F9 增加断点 F5 开始运行调试 F10 一行一行往下执行 F11 单步执行 shift+F11 跳出某个函数 (按照窗口-》内存就可以看到取某个字符串或是整数等的地址,查看元素) shift+F9 快速监视 可以监视某个变量的内存地址 调试->窗口->反汇编 切汇编代码 ctrl+k+c 快速注释
- C++语言标准设置
#include(2)实例化using namespace std; namespace _nmsp1 { //快速注释 //int32_t Sub(int32_t tv1, int32_t tv2) //{ // return tv1 - tv2; //} //float Sub(float tv1, float tv2) //{ // return tv1 - tv2; //} template //T:称之为类型模板参数,T代表的是一个类型 //(typename语法上可以用class取代,但是这里的class只是修饰,不表示类) T sub(T tv1, T tv2) { return tv1 - tv2; } } int main() { int32_t subv = _nmsp1::sub(3, 5); cout << "subv=" << subv << endl; double subv2 = _nmsp1::sub(4.7, 2.1); cout << "subv=" << subv2 << endl; }
-
说明
实例化:用具体的类型代替类型模板参数的过程 -
用obj文件生成txt调试信息
用工具Developer Command Prompt For VS 2019
dumpbin /all Myproject.obj > MyproJect.txt
-
实例化的函数名字
-
函数模板中的函数要点
1)函数体和函数声明都放在一个.h文件中 -
指定模板参数类型
double subv = _nmsp1::Sub(3)模板参数的推断 (3.1)常规的参数判断(四种方法)(3, 5.9);
- 第一种调用方式
#includeusing namespace std; namespace _nmsp1 { template V Add(T tv1, U tv2) { return tv1 + tv2; } } int main() { //指定三个模板参数的类型 cout << _nmsp1::Add (15, 17.8) << endl; }
- 第二种调用方式
#includeusing namespace std; namespace _nmsp1 { template V Add(T tv1, U tv2) { return tv1 + tv2; } } int main() { //指定三个模板参数的类型 cout << _nmsp1::Add (15, 17.8) << endl; }
- 第三种:auto自动判断返回类型
#includeusing namespace std; namespace _nmsp1 { template auto Add(T tv1, U tv2) { return tv1 + tv2; } } int main() { //指定三个模板参数的类型 cout << _nmsp1::Add(15, 17.8) << endl; }
- 第四种:返回类型后置语法(这里的auto只是返回类型判断的语法组成部分,并没有类型推导)
#include(3.2)各种推断的比较以及空模板参数列表的推断(编译器优先调用非模板函数,也就是普通函数)using namespace std; namespace _nmsp1 { template auto Add(T tv1, U tv2)->decltype(tv1 + tv2) { return tv1 + tv2; } } int main() { //指定三个模板参数的类型 cout << _nmsp1::Add(15, 17.8) << endl; }
- 1)自动推断
mydouble(10)
- 2)指定推断
mydouble(10)
- 3)指定模板参数列表(空的<>看起来没有作用,但是语法上允许,用了<.>优先调用函数模板)
auto result3 = mydouble<>(16.9); //打印33.82)类模板、变量模板、别名模板 3)类模板的有元 4)可变参模板 5)多态在模板中的应用 6)模板的一些特殊继承关系 7)模板代码的组织结构与模板的显示实例化和声明



