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
上一篇: 炒毛豆米要先焯水么?
下一篇: 黑洞是种什么天体?黑洞又是怎么形成的?