我正在尝试为内部类编写哈希函数,该内部类是较大类的受保护成员。此外,哈希函数应使用内部类的受保护成员(在这种情况下为字符串)。因此,这是没有哈希函数的情况:
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;
};
由于我将InternalClass用作MasterClass中unordered_map的键,因此需要定义哈希函数。
我正在使用以下参考文献:
- 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)第719行\ microsoft Visual Studio \ 2017 \ Enterprise \ VC \ Tools \ MSVC \ 14.16.27023 \ include \ type_traits“)”
如何为受保护的内部类定义哈希函数(使用内部类的受保护成员)?