フェルマータ

個人用のメモ。ソフトウェアの導入とかが多くなる予定。

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