模板的声明和实现

来源:互联网 发布:邦威 洗浴软件 编辑:程序博客网 时间:2024/05/13 09:39

通过显式的模板实例化得到类型。将所有的显式实例化过程安放在另外的文件中。在本例中,可以创建一个新文件templateinstantiations.cpp:

// array.h#ifndef MYARRAY_H#define MYARRAY_Htemplate <typename T, int SIZE>class Myarray{    T data_[SIZE];    Myarray (const Myarray& other);    const Myarray& operator = (const Myarray& other);public:    Myarray(){};    T& operator[](int i); //{return data_[i];}    const T& get_elem (int i) const; //{return data_[i];}    void set_elem(int i, const T& value); //{data_[i] = value;}    operator T*(); //{return data_;}};#endif


// array.cpp#include "array.h"template<typename T, int SIZE> T& Myarray<T, SIZE>::operator [](int i){    return data_[i];}template<typename T, int SIZE> const T& Myarray<T, SIZE>::get_elem(int i) const{    return data_[i];}template<typename T, int SIZE> void Myarray<T, SIZE>::set_elem(int i, const T& value){    data_[i] = value;}template<typename T, int SIZE> Myarray<T, SIZE>::operator T*(){    return data_;}


// templateinstantiations.cpp#include "array.cpp"template class Myarray <int, 50>; // 显式实例化


// main.cpp#include <iostream>#include "array.h";using namespace std;int main(void){    Myarray<int, 50> intArray;    intArray.set_elem(0, 2);    int firstElem = intArray.get_elem(0);    cout << firstElem << endl;}