//C++提高编程 模板(泛型编程 STL)
//模板不可以直接使用 它只是一个框架
//模板的通用并不是万能的
//语法
//template<typename T>
//函数模板两种方式
//1.自动类型推导 必须推导出一致的数据类型T,才可以使用
//2.显示指定类型 模板必须确定出T的数据类型,才可以使用

//普通函数与函数模板的区别:
//普通函数调用时可以发生自动类型转换(隐式类型转换)
//函数模板调用时 如果利用自动类型推导,不会发生隐式类型转换
//如果利用显示指定类型的方式 可以发生隐式类型转换

//普通函数与函数模板的调用规则:
//1.如果函数模板与普通函数都可以实现,优先调用普通函数
//2.可以通过空模板参数列表来强制掉用函数模板
//3.函数模板也可以发生重载
//4.如果函数模板可以产生更好的匹配 优先调用函数模板
//5.普通函数 模板函数最好不要同时出现 可能会出现二议性

//模板的局限性
//模板的通用性并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现
//利用具体化的模板,可以解决自定义类型的通过化
//学习模板并不是为了写模板,而是在STL能够运用系统提供的模板

  1 //模板的局限性
2 //模板的通用性并不是万能的,有些特定数据类型,需要用具体化方式做特殊实现
3 //利用具体化的模板,可以解决自定义类型的通过化
4 //学习模板并不是为了写模板,而是在STL能够运用系统提供的模板
5
6 #include <iostream>
7 #include <string>
8 #include<fstream>
9 using namespace std;
10
11 class Person
12 {
13 public:
14 Person(string name, int age)
15 {
16 this->m_Name = name;
17 this->m_AGe = age;
18 }
19 //姓名
20 string m_Name;
21
22 //年龄
23 int m_AGe;
24
25
26 };
27
28
29
30
31 //对比两个数据是否相等
32 template<typename T>
33 bool myCompare(T& a, T& b)
34 {
35 if (a == b)
36 {
37 return true;
38 }
39 else
40 {
41 return false;
42 }
43 }
44
45 //利用具体化Person的版本来实现代码,具体化优先调用
46 template<> bool myCompare(Person& p1, Person& p2)
47 {
48 if (p1.m_Name == p2.m_Name && p1.m_AGe == p2.m_AGe)
49 {
50 return true;
51 }
52 else
53 {
54 return false;
55 }
56 }
57
58 void test01()
59 {
60 int a = 10;
61 int b = 20;
62
63 bool ret = myCompare(a, b);
64
65 if (ret)
66 {
67 cout << "a==b" << endl;
68 }
69 else
70 {
71 cout << "a != b" << endl;
72 }
73 }
74
75 void test02()
76 {
77 Person p1("Tom", 10);
78 Person p2("Tom", 110);
79
80 bool ret = myCompare(p1, p2);
81 if (ret)
82 {
83 cout << "p1==p2" << endl;
84
85 }
86 else
87 {
88 cout << "p1 !=p2" << endl;
89 }
90 }
91 int main()
92 {
93
94 // test01();
95 test02();
96
97 system("pause");
98
99 return 0;
100
101 }

C++函数模板总结:的更多相关文章

  1. c++函数模板作为类的成员函数,编译报错LNK2019的解决方法

    为了使某个类的成员函数能对不同的参数进行相同的处理,需要用到函数模板,即template<typename T> void Function(). 编译时报错LNK2019 解决方法: 1 ...

  2. C++STL - 函数模板

    模板主要是为了泛型编程,做到与类型无关 模板有函数模板和类模板,本文主要整理的是函数模板 1.函数模板定义 template<typename 类型形参1,typename 类型形参2,...& ...

  3. 使用getopt_long来解析参数的小函数模板

    getopt_long原型 #define no_argument 0 #define required_argument 1 #define optional_argument 2 struct o ...

  4. C++函数重载和函数模板

    1.函数重载 这是小菜鸟写的一个例子. 函数重载应该注意以下几点: 1.1重载函数有类似的功能: 1.2只能以参数的类型(形参个数和类型)来重载函数, int max(int a,int b);flo ...

  5. 零值初始化&字符串常数作为函数模板参数

    1.在定义一个局部变量时,并希望该局部变量的初始化一个值,可以显示调用其默认构造函数,使其值为0(bool类型默认值为false). template <typename T> void ...

  6. 让gcc支持成员函数模板的trick

    让gcc支持成员函数模板的trick 罗朝辉 (http://www.cnblogs.com/kesalin/) 本文遵循“署名-非商业用途-保持一致”创作公用协议   gcc 4.7.3 不支持成员 ...

  7. 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板

    [源码下载] 不可或缺 Windows Native (16) - C++: 函数重载, 缺省参数, 内联函数, 函数模板 作者:webabcd 介绍不可或缺 Windows Native 之 C++ ...

  8. Effective C++ -----条款45:运用成员函数模板接受所有兼容类型

    请使用member function templates(成员函数模板)生成”可接受所有兼容类型“的函数. 如果你声明member templates 用于“泛化copy构造”或“泛化assignme ...

  9. c++ 左值右值 函数模板

    1.先看一段代码,这就是一种函数模板的用法,但是红色的部分如果把a写成a++或者写成一个常量比如1,都是编译不过的,因为如果是a++的话,实际上首先是取得a的 值0,而0作为一个常量没有地址.写成1也 ...

  10. 读书笔记_Effective_C++_条款四十五:运用成员函数模板接受所有兼容类型

    比如有一个Base类和一个Derived类,像下面这样: class BaseClass {…}; class DerivedClass : public BaseClass {…}; 因为是父类与子 ...

随机推荐

  1. vim 从嫌弃到依赖(5)——普通模式的一些操作

    通过前面几章内容的铺垫,基本已经介绍完了普通模式的大部分内容,按照进度下面会依次介绍插入模式.命令模式.选择模式的一些操作.根据不同模式提供功能的多少和使用频率,篇幅会有长有短.本来这篇文章应该介绍插 ...

  2. TienChin-课程管理-课程导出

    更改 Course.java: /** * 课程ID */ @TableId(value = "course_id", type = IdType.AUTO) @NotNull(m ...

  3. 抢占GPU的脚本

    前言 同样的,这篇博客也源自于我在做组内2030项目所产生的结果.当时,5个硕士生需要进行类似的微调工作,偶尔还会有博士生使用服务器上的GPU,但服务器上仅有8块GPU. 因此,如何快速抢占到 \(n ...

  4. LyScriptTools 调试控制类API接口手册

    LyScriptTools模块中的DebugControl类主要负责控制x64dbg调试器的行为,例如获取或设置寄存器组,执行单步命令等,此类内的方法也是最常用的. 插件地址:https://gith ...

  5. vue-cli3创建多页面应用

    首先用vue-cli3创建工程,我的全局安装了vue-cli2,又不想卸载掉:所以新建了一个文件夹安装vue-cli3:然后在该文件夹下创建工程: 同时安装vue-cli2和vue-cli3参考:ht ...

  6. Docker从认识到实践再到底层原理(四-1)|Docker镜像仓库|超详细详解

    前言 那么这里博主先安利一些干货满满的专栏了! 首先是博主的高质量博客的汇总,这个专栏里面的博客,都是博主最最用心写的一部分,干货满满,希望对大家有帮助. 高质量博客汇总 然后就是博主最近最花时间的一 ...

  7. 【架构师视角系列】Apollo配置中心之Server端(ConfigSevice)(三)

    目录 声明 配置中心系列文章 一.通知机制 二.架构思考 三.源码剖析 1.配置监听 1.1.建立长轮询 1.1.1.逻辑描述 1.1.2.时序图 1.1.3.代码位置 1.1.3.1.Notific ...

  8. 19c RAC 告警日志报错 ORA 7445 [pevm_icd_call_common()+225]

    问题现象: 在一套2节点的19c RAC 环境下,节点2 alert告警 ORA 7445,且频度固定为每分钟报一次:期间有重启实例,但故障依旧: ========================== ...

  9. MYSQL 3 DAY

    目录 MySQL day03 1.约束 1.1.唯一性约束(unique) 1.2.主键约束 1.3.外键约束 2.存储引擎?(整个内容属于了解内容) 2.1.完整的建表语句 2.2.什么是存储引擎呢 ...

  10. 使用 .NET 8.0 和 OpenGL 创建一个简易的渲染器

    前言我个人对三维渲染领域的开发有着浓厚的兴趣,尽管并未在相关行业工作过,我的了解还很片面.去年,在与群友聊天时,他们推荐了一本<Unity Shader入门精要>,说适合像我这样想自学的新 ...