#include <iostream>
using namespace std;
template <typename T, unsigned size> //int 可以省略。这就是定义一个size后面会传入值。
class array2{
T elems[size];
public:
T&operator[](unsigned i)throw (std::out_of_range){
//重新定义[]后面的()里面是[]里的参数类型,throw为抛出异常。
//访问元素是否越界
if(i>= size){
throw out_of_range("Access out of range");
}else
{
return elems[i];
}
}
array2(){
for(unsigned i=0;i<size;i++){
elems[i]=i;
}
}
};
int main() {
const int a=6;
array2<int,10> K;
cout<<K[1]<<endl;
std::cout << "Hello, World!" << std::endl;
return 0;
}
无类型模板参数
无类型模板参数不能是对象,甚至不能是double或者float。无类型参数仅限于int、enmu、指针和引用。
有时可能想要允许用户指定一个特定值的元素来初始化空对象,可以使用以下的方法:
template<typename T,const T EMPTY>
class Grid
{
public:
//Omitted for brevity
Grid(const Grid<T,EMPTY>& src);
Grid<T,EMPTY>& operator=( const Grid<T,EMPTY>& rhs);
//...
};
我们可以这样使用:
Grid<int,10> myIntGrid;
Grid<int,20> myIntGrid2;
初始值可以是任意的int数,也就是必须是int、enmu、指针和引用的一种。