C++学习Day08之模板实现机制和模板局限性

目录


一、程序及输出

1.1 模板的实现机制

1 编译器并不是把函数模板处理成能够处理任何类型的函数

2 函数模板通过具体类型产生不同的函数 --- 通过函数模板产生的函数 称为模板函数

3 编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。

1.2 模板局限性

模板并不是真实的通用,对于自定义数据类型,可以使用具体化技术,实现对自定义数据类型特殊使用

template<> bool myCompare(Person &a, Person &b)

c 复制代码
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
using namespace std;
#include <string>
class Person
{
public:
	Person(string name, int age)
	{
		this->m_Name = name;
		this->m_Age = age;
	}
	string m_Name;
	int m_Age;
};

//显示两个变量 对比 函数
template<class T>
bool myCompare(T &a ,T&b)
{
	if (a == b)
	{
		return true;
	}
	return false;
}

//利用具体化技术 实现对自定义数据类型 提供特殊模板
template<> bool myCompare(Person &a, Person &b)
{
	if (a.m_Name == b.m_Name && a.m_Age == b.m_Age)
	{
		return true;
	}
	return false;
}

void test01()
{
	int a = 10;
	int b = 10;

	bool ret = myCompare(a, b);

	if (ret )
	{
		cout << "a == b" << endl;
	}
	else
	{
		cout << "a != b" << endl;
	}

	Person p1("Tom", 19);
	Person p2("Tom", 20);

	 ret = myCompare(p1, p2);
	if (ret)
	{
		cout << "p1 == p2" << endl;
	}
	else
	{
		cout << "p1 != p2" << endl;
	}
}

int main(){
	test01();

	system("pause");
	return EXIT_SUCCESS;
}

输出:


二、分析与总结

模板的实现机制:

1 编译器并不是把函数模板处理成能够处理任何类型的函数

2 函数模板通过具体类型产生不同的函数 --- 通过函数模板产生的函数 称为模板函数

3 编译器会对函数模板进行两次编译,在声明的地方对模板代码本身进行编译,在调用的地方对参数替换后的代码进行编译。
模板的局限性

模板并不是真实的通用,对于自定义数据类型,可以使用具体化技术,实现对自定义数据类型特殊使用

template<> bool myCompare(Person &a, Person &b)

相关推荐
blasit5 小时前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
肆忆_1 天前
# 用 5 个问题学懂 C++ 虚函数(入门级)
c++
不想写代码的星星1 天前
虚函数表:C++ 多态背后的那个男人
c++
端平入洛3 天前
delete又未完全delete
c++
端平入洛4 天前
auto有时不auto
c++
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
哇哈哈20215 天前
信号量和信号
linux·c++
多恩Stone5 天前
【C++入门扫盲1】C++ 与 Python:类型、编译器/解释器与 CPU 的关系
开发语言·c++·人工智能·python·算法·3d·aigc
蜡笔小马5 天前
21.Boost.Geometry disjoint、distance、envelope、equals、expand和for_each算法接口详解
c++·算法·boost
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习