为了防止在连接时出现多重定义,一般类型的定义不会放在头文件中,但模板的定义很特殊,由template<>处理的任何东西意味着编译器在当时不为它分配存储空间,它一直处于等待状态直到被一个模板实例告知,有一种机制能去掉模板的多重定义,为了使用方便,几乎总是在头文件中放置全部的模板声明和定义
#include <iostream>
#include <assert.h>
using namespace std;
template<typename T>
class array
{
enum{size = 100};
T A[size];
public:
T& operator[](int index);
};
template<typename T>
T& array<T>::operator [](int index)
{
assert(index >= 0 && index < size);
return A[index];
}
int main()
{
array<float> fa;
fa[0] = 1.414f;
cout << "fa[0]==" << fa[0] << endl;
return 1;
}