string* ps
プライベート データ メンバーを持つクラス C があります。
ここで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);
}
};
}
問題は、 にアクセスできるように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.
しかし、不完全な型...ネストされた名前指定子で...
クラス C が後で定義された場合、hash<C>
は について知る方法がないため、定義を変更することもできませんps
。
ここで何が間違っていますか?ps
公開せずにこの状況をどのように修正できますか?