C++模板相互依赖类型

标签 c++ templates

我正在尝试用 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模板参数,了解更多。您可以从这里开始:

希望对您有所帮助。

关于C++模板相互依赖类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15802501/

相关文章:

c++ - 嵌套的命名空间和不明确的符号

html - 将静态网站迁移到 TYPO3 的最简单方法(HTML 模板?)

c++ - fpermissive 标志有什么作用?

c++ - 为什么 "Attach to Process"不允许其他传输类型? VS 2008

c++ - 导致无限循环的括号

c++ - 如何将 typename 传递给我不想模板化的类?

c++ - 模板多重继承歧义符号错误

javascript - 在 mustache.js 中获取 : Uncaught TypeError: Invalid template! ...

c++ - 使用 Emacs 在 c++ 模式下不完整的突出显示

c++ - std::is_trivially_equality_comparable_v<T>