如何在具有依赖元素类型的模板类构造函数中初始化向量

How to initialize vector in template class constructor with dependent element types

本文关键字:构造函数 向量 初始化 类型 元素 依赖      更新时间:2023-10-16

这是我为模板类及其构造函数编写的代码。我无法初始化元素为复杂模板类型的向量。

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,但它应该是无符号类型,而不是(signedint