我正在尝试用 C++ 编写简单的哈希表。我的哈希表实现模板如下所示:
template<class k, class v, class h<k>, class e<k> >
class my_hash {
};
在哪里
k = 键的类类型
v = 值的类类型
h = 散列 fn 的类类型
e = 等式 fn 的类类型
我这样定义类h
template<class k>
class h {
};
我会专门针对不同的 k 类型的上述模板,例如int, string 等。我想做的是每当我用 k 调用 my_hash 模板时,它应该自动获取
h<k>
作为哈希函数类型。要实现这一点,我该如何定义模板?
如果我像上面显示的那样定义它,g++ 会给出编译器错误,说 h 不是模板?有人可以帮我解决这个问题吗?
最佳答案
我想你需要的是模板模板参数,它是这样的:
template<class k, class v, template<typename> class h, template<typename> class e>
class my_hash
{
//then here you can intantiate the template template parameter as
h<k> hobj;
e<k> eobj;
//...
};
现在您可以将类模板(它接受一个类型参数)作为第三个和第四个模板参数传递给上面的类模板。在你的书里或者网上找template模板参数,了解更多。您可以从这里开始:
- What are some uses of template template parameters in C++?
- C++ Common Knowledge: Template Template Parameters
希望对您有所帮助。
关于C++模板相互依赖类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15802501/