我有一个C类,它有一个string* ps私有数据成员.
现在,我想要一个unordered_map<C, int>我需要自定义哈希函数的东西.
根据c ++参考,我可以这样做
namespace std {
template<>
class hash<C> {
public:
size_t operator()(const C &c) const
{
return std::hash<std::string>()(*c.ps);
}
};
}
Run Code Online (Sandbox Code Playgroud)
问题是,我似乎无法operator()与C朋友交往,以便我可以访问ps.
我试过这个:
class C;
template<>
class std::hash<C>;
class C{
//...
friend std::hash<C>::operator ()(const C&) const; // error: Incomplete type
};
// define hash<C> here.
Run Code Online (Sandbox Code Playgroud)
但它说嵌套名称说明符中的不完整类型...
我也无法扭转这些定义,因为如果后来定义了C类,hash<C>则无法知道ps.
我在这做错了什么?如何在不ps公开的情况下解决这种情况?