请问vc中的容器类问题

来源:百度知道 编辑:UC知道 时间:2024/05/22 16:01:21
#include "stdafx.h"

template <class T>class Array{
public:
Array():data(0),sz(0){}
Array(unsigned size):sz(size),data(new T[size]){}
~Array(){delete [] data;}
const T& operator[](unsigned n) const
{
if(n>=sz||data==0)
throw "Array subscript out of range";
return data[n];
}
T& operator[](unsigned n)
{
if(n>=sz||data==0)
throw "Array subscript out of range";
return data[n];
}
operator const T*() const
{
return data;
}
operator T*()
{
return data;
}
private:
T* data;
unsigned sz;
Array(const Array& a);
Array& operator=(const Array&);
};

为什么不支持Array<Array<int>> a(10);这样的定义呢?
而书上说Array包含了缺省构造函数,允许上面的定义?谢谢!

我在VC6下只有 Array<Array<int>> a(10)这一句通不过编译.用下面的方法通过了:
typedef Array<int> ARRINT;
Array<ARRINT> a(10);

还有上面那句"template <class T>"最好用"template <typename T>"代替,ANSI C++允许使用class代替typename,但不赞成这样做.