模板是否具有范围或范围

时间:2015-06-02 06:07:05

标签: c++ templates

我试图创建一个类模板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>

以下是我的问题

  1. 模板是否具有类似于

  2. 的范围或范围
  3. 如果是这样,在类范围外定义类模板的成员函数时,我们必须声明这么多template <typename t>定义,或者有更好的替代方法

  4. 这可能与模板无关;如何在运行时指定矢量或数组的大小,如c99中的可变长度数组(VLA)。例如v.reseve(n)其中n在运行时已知。

1 个答案:

答案 0 :(得分:0)

  1. template<typename t>更像是类或函数的属性,而不是一般声明。从这个意义上讲,是的,范围是紧随其后的函数或类。
  2. 不,我知道没有更好的选择。您必须重复template<typename t>
  3. 就像使用固定长度数组一样:

    int length = someFunction();
    double myNumbers[length];
    myNumbers[0] = 3.3;