如何在具有依赖元素类型的模板类构造函数中初始化向量
How to initialize vector in template class constructor with dependent element types
这是我为模板类及其构造函数编写的代码。我无法初始化元素为复杂模板类型的向量。
template <class Key, class Obj>
class HashTable{
typedef int T;
typedef pair<const Key, Obj> Entry;
typedef list<Entry> Bucket;
typedef vector<Bucket> BktArray;
private:
T n, nbuckets;
BktArray a;
public:
HashTable(T capacity = 199){
n = 0;
nbuckets = capacity;
Bucket b();
a = vector<Bucket>(capacity, b);
}
};
我得到了"没有匹配功能的调用"在行:
a = vector<Bucket>(capacity, b);
我想初始化向量以包含"容量"元素。
Bucket b();
声明了一个名为b
的函数,该函数返回一个Bucket
实例。这里不是您想要的(因此是不匹配的类型)。b
也是不必要的,没有它的vector
构造函数做的是正确的(=它默认构造它的元素)。
更一般地说,您应该在这里绝对使用初始化程序列表。因此,将代码重写如下:
HashTable(T capacity = 199)
: n(), nbuckets(capacity), a(vector<Bucket>(capacity))
{ }
此外,将T
作为int
的类型别名是非常误导的,我不建议这样做。在此上下文中的标准类型名称应该是size_type
,但它应该是无符号类型,而不是(signed
)int
。
相关文章:
- 一对向量构造函数:初始值设定项列表与显式构造
- 在c++中使用向量时,如何调用构造函数和析构函数
- 我使用向量来创建类对象列表.初始化向量时如何使用参数调用构造函数?
- 通过构造函数创建的所有对象都具有相同的向量
- 如何在 C++ 中使用它的构造函数初始化 unique_ptrs 的 2D 向量?
- 在 c++ 中具有向量的双向链表构造函数
- 将向量从 N1 缩小到 N2 项,而不触发默认构造函数并仅使用 move 语义
- 使用向量初始化参数化构造函数的对象数组
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- 初始化构造函数C++中结构的向量
- 在具有向量的类构造函数中进行析构函数调用
- 在 c++ 的构造函数中分配对象向量时出错
- 在类和构造函数中使用向量时出现分段错误
- 为什么调用复制构造函数来构造空unique_ptr向量?
- 有没有一种简单的方法可以在对象向量上调用构造函数?
- C++:无法将向量传递给构造函数
- STL向量上出现奇怪的复制构造函数错误
- 使用所述填充构造函数初始化向量中的向量
- C++:在向量<int> vn{MyAllocator<int>(a)} 中调用哪些构造函数?
- 是否将std矢量重新分配到默认的构造函数向量是擦除的好方法