A.h
class A
{
...
}
namespace std
{
template<typename T>
struct hash;
}
A.cpp
template<> struct std::hash<A>
{
public:
virtual std::size_t operator()(const A& joint) const noexcept
{
..
}
和类似的类,假设class B
和class C
现在
class B
使用A的哈希,例如:
boost::hash_combine(h, std::hash<A>{}(b.getA())
问题:error: use of deleted function std::hash<A>::hash()
我尝试过:A.h
namespace std
{
template<typename T>
struct hash;
}
B.h
class B { friend struct std::hash<A>; }
我有多个类,它们会重载std :: hash operator()。假设:A.h类A {...}命名空间std {templatestruct hash; } A.cpp template <> struct std :: hash&...
std::hash<A>
中定义A.h
专业化,以便B
和C
能够看到该专业化存在并且具有operator()
成员。如果B
和C
无法“看到” std::hash<A>
专业化,则它们将实例化主要的std::hash
模板,该模板已禁用,因为标准库不知道如何对用户进行哈希处理-定义的类型A
。