欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C++模板学习之数组类模板实例讲解

程序员文章站 2023-01-15 08:55:41
模板参数可以是数值型参数(非类型参数) 数值型模板也有相应的限制。 问题:之前我们在类模板都是使用泛指类型的。但是当我们需要定义一个模板数组时,不仅仅需要定义数组的类型,还需要指定数组的大小。 而当...

模板参数可以是数值型参数(非类型参数) 数值型模板也有相应的限制。

问题:之前我们在类模板都是使用泛指类型的。但是当我们需要定义一个模板数组时,不仅仅需要定义数组的类型,还需要指定数组的大小。

而当我们在指定数组大小时,需要指定一个整形数。那么在模板中如何设定呢?

模板参数可以是数值型参数(非类型参数)

template
< typename t, int n >
void func()
{
  t a[n]; //使用模板参数定义局部数组
}
func();

数值型模板也有相应的限制。

变量不能作为模板参数 浮点数不能作为模板参数 类对象不能作为模板参数 。。。

本质:模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定。

这跟数组的定义时一样的。数组的大小在编译阶段必须确定。所以并不能使用变量来指定数组的大小。而却数组的大小也不可能是浮点数。

示例代码:数组类模板

#ifndef _array_h_
#define _array_h_

template< typename t, int n >
class array
{
 t m_array[n]
public:
 int length();
 bool set(int index, t value);
 bool get(int index, t& value);
 t& operator[] (int index);
 t operator[] (int index) const;
 virtual ~array();
};


template< typename t, int n >
int array::length()
{
 return n;
}

template< typename t, int n >
bool array::set(int index, t value)
{
 bool ret = (0<=index) && (index
bool array::get(int index, t& value)
{
 bool ret = (0 <= index) && (index < n);

 if( ret )
 {
  value = m_array[index];
 }

 return ret;
}

template
< typename t, int n >
t& array::operator[] (int index)
{
 if( (0<=index) && (index
array::~array()
{

}

#endif