【发布时间】:2020-07-05 18:44:28
【问题描述】:
我正在尝试为一个内部类编写一个散列函数,它是一个更大类的受保护成员。此外,散列函数应使用内部类的受保护成员(在本例中为字符串)。所以这就是没有散列函数的样子:
class MasterClass
{
public:
// Blah blah blah
protected:
class InternalClass
{
public:
// Blah blah blah 2
protected:
string m_Value;
};
unordered_map<InternalClass, uint> m_Example_Map;
};
由于我在 MasterClass 中的 unordered_map 中使用 InternalClass 作为键,因此我需要定义散列函数。
我正在使用以下参考资料:
- C++ unordered_map using a custom class type as the key
- How to hash std::string?
- Hash function for user defined class. How to make friends? :)
但我在我的头上。我最好的猜测是这样的:
class MasterClass::InternalClass;
namespace std
{
template<> struct hash<MasterClass::InternalClass>
{
public:
size_t operator()(const MasterClass::InternalClass& i_Internal) const;
};
}
class MasterClass
{
public:
// Blah blah blah
protected:
class InternalClass
{
public:
// Blah blah blah 2
protected:
string m_Value;
};
unordered_map<InternalClass, uint> m_Example_Map;
friend struct std::hash<MasterClass::InternalClass>::operator()(const MasterClass::InternalClass& i_Name) const;
};
namespace std
{
template<> size_t hash<MasterClass::InternalClass>::operator()(const MasterClass::InternalClass& i_Internal) const
{
return(std::hash<std::string>{}(*i_Internal.m_Value);
}
}
然而,这充满了编译器错误,包括“无效的友元声明”和“类“std::hash”的显式特化必须在其首次使用之前(在“C:\Program Files (x86)\ Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\include\type_traits")"
如何为受保护的内部类定义哈希函数(使用内部类的受保护成员)?
【问题讨论】:
标签: c++ oop hash unordered-map protected