qHash 関数と名前空間
概要
名前空間内で定義したクラスの qHash 関数の定義で手ひどい罠を踏んだので書いておく。
罠
これはダメなんだってさ。
namespace hoge { class Hoge { public: int foo; } } bool operator == (const hoge::Hoge &left, const hoge::Hoge &right) { return left.foo == right.foo; } unsigned int qHash(const hoge::Hoge& h) { return qHash(h); }
こうすると行ける。
namespace hoge { class Hoge { public: int foo; } bool operator == (const Hoge &left, const Hoge &right) { return left.foo == right.foo; } unsigned int qHash(const Hoge& h) { return qHash(h); } }
そっか。
参考資料
[QTBUG-34912] QHash compile error when using a key that is a class in a namespace - Qt Bug Tracker