我试图创建一个类模板array
,它可以接受任意边界,如50到60,100到200
我是编程新手,我有一个外行问题,模板是否有范围。我试着编译下面的程序
#include <iostream>
#include <vector>
#include <exception>
using namespace std;
template<typename t>
class array
{
private:
size_t size;
int lowerbound, upperbound;
vector<t> data;
public:
array(int , int );
array(const array<t> &);
int operator [](int );
};
template<typename t>
array<t>::array(int lbound, int rbound):
lowerbound(lbound), upperbound(rbound), size(upperbound - lowerbound + 1), data(size)
{
}
array<t>::array(const array<t> & c):
lowerbound(c.lowerbound), upperbound(c.upperbound), size(c.size)
{
data.reserve(size);
}
int array<t>::operator[](int index)
{
if (index < lowerbound || index > upperbound)cout << "fuck" << endl;
else
return data[index - lowerbound];
}
复制构造函数array<T>::array(const array <T> &C)
中的表示
t未声明..
我认为,因为我已经宣布template <typename t>
一开始就不需要额外的template<typename t>
以下是我的问题
模板是否具有类似于
如果是这样,在类范围外定义类模板的成员函数时,我们必须声明这么多template <typename t>
定义,或者有更好的替代方法
这可能与模板无关;如何在运行时指定矢量或数组的大小,如c99中的可变长度数组(VLA)。例如v.reseve(n)
其中n
在运行时已知。
答案 0 :(得分:0)
template<typename t>
更像是类或函数的属性,而不是一般声明。从这个意义上讲,是的,范围是紧随其后的函数或类。template<typename t>
就像使用固定长度数组一样:
int length = someFunction();
double myNumbers[length];
myNumbers[0] = 3.3;