我自己搭建了博客,以后可能不太在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(