浅谈C++ templates 函数模板、类模板以及非类型模板参数

本文介绍了C++中的模板基础知识,包括函数模板的使用,类模板的声明与实现,以及非类型模板参数的概念。通过实例展示了如何定义和调用这些模板,帮助读者理解模板在C++编程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我自己搭建了博客,以后可能不太在CSDN上发博文了,https://www.qingdujun.com/


最近打算挑选几个STL容器做个简单实现,发现里面牵涉到不少模板知识。这里算提前学习一下C++模板的相关知识吧。这次主要学习了什么是函数模板(这个最简单),类模板以及非类型模板参数。下面挨个举例说明。


1. 函数模板

函数模板是最简答的一个,下面就定义一个返回两个值中最大者的函数模板:

namespace og {
   

template<typename T>
inline const T& max(const T& a, const T& b) {
   
	return a > b ? a : b;
}

}

我有个习惯,喜欢用和系统相关库函数同样的函数名。那么,为了避免不必要的麻烦,用上了自己的命名空间。我比较喜欢og这两个字母。

咯,使用这种方式就可以调用了…

cout << og::max(100, 123) << endl;
cout << og::max(1.23, 999.9) << endl;

可以在控制台上看到这样的内容,
123
999.9

2. 类模板

翻了翻侯捷先生的STL书籍,准备动一下手。那么,第一步就是需要弄清楚类模板。就算原理不太清楚,至少要能看懂类模板,知道其表达的是什么意思,从而模仿着学会如何写类模板。与函数模板一样,这里也举个例子,使用类模板定义一个栈类:

第一步: 声明一个stack类,并加上类模板。

namespace og {
   

template<typename T>
class stack {
   
public:
	void push(const T&);
	void pop();
	T top() const;
	bool empty() const {
   
		return elems.empty(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值