简单来讲,模板的作用是为了令一个函数可以用于多种不同类的对象
函数模板定义语法:
语法形式:template <模板参数表>
函数定义
模板参数表的内容:
** 类型参数:class(或typename)标识符
** 常量参数: 类型说明符 标识符
** 模板参数: template <参数表> class 标识符
举例说明,我们想要令E代表 int, char, string,三种类型并且这些function是在Queue.h里面,程序的头文件以及cpp文件应该分别为:
#include <iostream>
using namespace std;
#ifndef NODE_TYPE_H_
#define NODE_TYPE_H_
template<class E>
class Queue
{
private:
NodeType<E> *front;
NodeType<E> *rear;
public:
Queue();
// The Rule of Three!
~Queue();
Queue(const Queue &);
Queue & operator = (const Queue &);
void make_empty();
void enqueue(E);
void dequeue(E &);
bool is_empty() const;
bool is_full() const;
};
#endif
将template<class E>写在需要应用的class前面,代表E可以应用在Queue类中
#include "Queue.h"
#include <cstddef>
#include <new>
// Default constructor
template<class E>
Queue<E>::Queue()
{
front = NULL;
rear = NULL;
}
// Destrcutor
template<class E>
Queue<E>::~Queue()
{
make_empty();
}
template<class E>
bool Queue<E>::is_full() const
{
NodeType<E> *location;
try
{
location = new NodeType<E>;
delete location;
return false;
}
catch(bad_alloc exception)
{
return true;
}
}
// Template class definitions
template class Queue<int>;
template class Queue<char>;
template class Queue<string>;
每个function前应该加上template<class E>,function 应写为 Queue<E>::函数名
并且在cpp文件最下端应该定义template所有的类型:template class Queue<int>