模板有作用域或类似的东西吗?
Do templates have scope or scope like thing
本文关键字:作用域 更新时间:2023-10-16
我尝试创建一个类模板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中的可变长度数组(VLAs)。例如
v.reseve(n)
,其中n
在运行时已知。
-
template<typename t>
更像是一个类或函数的属性,而不是一个通用声明。从这个意义上说,是的,作用域是紧跟其后的函数或类。不,据我所知没有更好的选择了。你必须重复template<typename t>
-
就像处理固定长度数组一样:
int length = someFunction(); double myNumbers[length]; myNumbers[0] = 3.3;
相关文章:
- 未在作用域中声明unordered_map
- 有没有一种方法可以在编译时获得作用域类名
- C++quit()函数中可能存在作用域问题
- 未在此作用域OpenCV3.4中声明cvSaveImage
- 全局作用域中函数指针的赋值
- 在类函数中初始化外部作用域变量
- 不同作用域中的静态变量和全局变量
- 是同一作用域的函数部分中的函数调用
- 未在此作用域中声明的函数和变量 (C++)
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 将作用域枚举转换为基础类型
- 表达式必须具有完整或无作用域的枚举图
- 在构造函数中输入对象时C++类成员作用域
- 无法让"std::enable_if"适用于无作用域枚举
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 函数未在作用域中声明 / 如何结合使用 header.h、header.cpp 和 main.cpp?
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 如何在C++中访问作用域的变量输出?
- 重载时未在 C++ 的作用域错误中声明
- 作用域枚举和标准::get