gpt4 book ai didi

c++ - 为嵌套自定义类型定义散列函数

转载 作者:行者123 更新时间:2023-11-28 06:07:28 24 4
gpt4 key购买 nike

给定如下嵌套模板类结构:

template<class T> class A
{
...
public:
...
class B;
};

我希望 std::hash 函数在嵌套类上工作,以便它可以放入 unsorted_map 和 unsorted_set 之类的东西中,所以我将嵌套类定义为:

template<class T> class A<T>::B 
{
public:
bool operator==(const A<T>::B &) const;
...
friend struct std::hash<A<T>::B>;
};

然后尝试为这种类型添加一个专门的 std::hash 结构,如下所示:

namespace std
{
template<class T> struct hash<A<T>::B>
{
bool operator()(const A<T>::B &x) const
{
...
}
};
}

但是当我尝试像这样定义自定义 std::hash 函数对象时,编译器强烈提示。

我得到的错误信息没有帮助,如下:

xyz.cc:17:38: error: type/value mismatch at argument 1 in template parameter list for 'template<class _Tp> struct std::hash'
template<class T> struct hash<A<T>::B>
^
xyz.cc:17:38: error: expected a type, got 'A<T>::B'

不过,我不确定我应该如何表达它。

为什么这是错误的,我必须怎样做才能解决它?

最佳答案

你不能。

依赖类型无法进行模式匹配,因为一般情况需要反转任意图灵完备算法。

最简单的方法是让B成为一个独立的模板,然后typedef到A

关于c++ - 为嵌套自定义类型定义散列函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32109146/

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