首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板是否有作用域或作用域?

模板是否有作用域或作用域?
EN

Stack Overflow用户
提问于 2015-06-02 06:07:05
回答 1查看 80关注 0票数 1

我尝试创建一个类模板array,它可以接受像50到60,100到200这样的任意边界。

我对编程很陌生,我有一个外行的问题:模板是否有作用域。我试着编译下面的程序

代码语言:javascript
复制
#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. 如果是这样的话,在类范围之外定义类模板的成员函数时,我们必须声明这么多template <typename t>定义,或者有更好的替代方法。
  3. 这可能与模板无关;如何在运行时指定向量或数组的大小,如c99中的可变长度数组(VLA)。例如,v.reseve(n),其中n在运行时是已知的。
EN

回答 1

Stack Overflow用户

发布于 2015-06-02 06:39:17

  1. template<typename t>更像是类或函数的属性,而不是一般声明。在这个意义上,是的,作用域是紧接着的函数或类。
  2. 不,据我所知,没有更好的选择了。你必须重复template<typename t>
  3. 只需像对固定长度数组一样: 整数长度= someFunction();双myNumberslength;myNumbers = 3.3;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30588561

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档