通过显式的模板实例化得到类型。将所有的显式实例化过程安放在另外的文件中。在本例中,可以创建一个新文件templateinstantiations.cpp:
// array.h
#ifndef MYARRAY_H
#define MYARRAY_H
template <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;
}