gpt4 book ai didi

c++ - 专门用于嵌套类 C++ 的哈希类

转载 作者:行者123 更新时间:2023-11-30 05:26:43 26 4
gpt4 key购买 nike

目标是专门化 std::hash 以与名为 Node 的子类一起工作。

相关类是:

template<typename T,
typename Hash = std::hash<T>,
typename Pred = std::equal_to <T>,
typename Alloc = std::allocator<T>>
class disjoint_set
{
public:
typedef Hash hasher;
typedef Pred value_equal;
typedef Alloc allocator_type;

protected:
class Node;
unordered_set<Node> table;
// friend class std::hash; // possible solution

class Node
{
public:
T data;
// .......
};
};

我想要一个哈希函数如下:

size_t operator()(const Node& node) const { return hasher(node.data); }

但是,散列器特化必须在命名空间 std 中。我找到的一个解决方案是将特化设为友元类,但在那种情况下我不确定如何访问主类的模板参数?

最佳答案

你不能专注于类模板的嵌套类 - 你必须编写如下内容:

template <class T>
struct hash<typename Outer<T>::Inner> { ... };

但那是一个非推导的上下文,所以永远行不通。

相反,只需将您的 Node 拉出 disjoint_set 并使其成为一个独立的类模板。到那时,专门化 std::hash 变得简单明了,在 disjoint_set 中使用它也同样容易。

关于c++ - 专门用于嵌套类 C++ 的哈希类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37625912/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com