模版/template

简单来讲,模板的作用是为了令一个函数可以用于多种不同类的对象

函数模板定义语法:

语法形式: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>

猜你喜欢

转载自blog.csdn.net/weixin_42380877/article/details/81152331