C++学习笔记(三十一):c++ 模板template

  • 模板是c++提供的重要特性,类似Java中的泛型,但比泛型功能强大很多,在平时的工程中及各种开源框架、库的源码中都大量使用模板。模板的使用可以极大程度减少重复代码的编写。
  • 模板允许开发者根据需求定义一个可以编译的模板,可以让编译器基于指定的规则帮助开发者完成代码。
  • 模板的简单实现:
cpp 复制代码
#include <iostream>

//创建一个函数,可以打印任意类型的参数
template<class T>
void Print(T value)
{
	std::cout << value << std::endl;
}

int main()
{
	Print(5);
	Print<std::string>("Hello World!"); //<std::string>可选,可以写也可以不写

	std::cin.get();
}
cpp 复制代码
#include <iostream>

//创建一个函数,可以打印任意类型的参数
template<int T>
class Array 
{
private:
	int m_Array[T];
public:
	int getArraySize()
	{
		return T;
	}
};

int main()
{
	//在栈上创建一个类,通过这种方式创建数组,不需要在定义的时候明确指定数组的大小
	Array<5> array;
	std::cout << array.getArraySize() << std::endl;

	std::cin.get();
}
cpp 复制代码
#include <iostream>

//创建一个函数,可以打印任意类型的参数,在此处typename和classname意思一样
template<typename T, int N>
class Array 
{
private:
	T m_Array[N];
public:
	int getArraySize()
	{
		return N;
	}
};

int main()
{
	//在栈上创建一个类,通过这种方式创建数组,不需要在定义的时候明确指定数组的大小
	Array<int, 5> array;
	std::cout << array.getArraySize() << std::endl;

	Array<float, 5> array;
	std::cout << array.getArraySize() << std::endl;

	std::cin.get();
}
  • 从上述三个示例中,可以看出,模板的自由度非常高,但也不是意味着需要处处都使用模板,接下来就个人理解,简单描述什么时候应该使用模板。

  • 如果模板特别复杂,则会增加排故的工作量,需要花大量的时间去梳理哪些地方的代码已经被编译,哪些地方没有被编译。但类似日志系统之类的则可以使用模板,需要频繁打印不同类型的参数数据等等。

相关推荐
知识分享小能手1 小时前
React学习教程,从入门到精通, React 属性(Props)语法知识点与案例详解(14)
前端·javascript·vue.js·学习·react.js·vue·react
汇能感知3 小时前
摄像头模块在运动相机中的特殊应用
经验分享·笔记·科技
阿巴Jun3 小时前
【数学】线性代数知识点总结
笔记·线性代数·矩阵
茯苓gao4 小时前
STM32G4 速度环开环,电流环闭环 IF模式建模
笔记·stm32·单片机·嵌入式硬件·学习
是誰萆微了承諾4 小时前
【golang学习笔记 gin 】1.2 redis 的使用
笔记·学习·golang
DKPT5 小时前
Java内存区域与内存溢出
java·开发语言·jvm·笔记·学习
aaaweiaaaaaa5 小时前
HTML和CSS学习
前端·css·学习·html
ST.J5 小时前
前端笔记2025
前端·javascript·css·vue.js·笔记
Suckerbin5 小时前
LAMPSecurity: CTF5靶场渗透
笔记·安全·web安全·网络安全
看海天一色听风起雨落6 小时前
Python学习之装饰器
开发语言·python·学习