unordered_mapのキーとして使用するために、ネームスペース内のユニオンクラスの比較演算子をオーバーロードしようとしています。ネームスペース内のクラス外の演算子オーバーロード
XH:
#include <DirectXPackedVector.h>
namespace std
{
template<> struct hash<DirectX::PackedVector::XMUBYTEN4>
{
std::size_t operator()(DirectX::PackedVector::XMUBYTEN4 const& s) const {
std::size_t const h1(std::hash<uint8_t>()(s.x));
std::size_t const h2(std::hash<uint8_t>()(s.y));
std::size_t const h3(std::hash<uint8_t>()(s.z));
std::size_t const h4(std::hash<uint8_t>()(s.w));
return h1^(h2 << 1)^(h3 << 2)^(h4 << 3);
}
};
}
std::unordered_map<DirectX::PackedVector::XMUBYTEN4, unsigned int> mc_province_index;
ハッシュが正常に動作しますが、私はそうのような比較演算子オーバーロードしようとすると:
bool operator==(const DirectX::PackedVector::XMUBYTEN4 & lhs, const DirectX::PackedVector::XMUBYTEN4 & rhs) {
if (lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z && lhs.w == rhs.w)
return true;
return false;
}
を私はそれをやってみました
C2678: binary '==' : no operator found which takes a left-hand operand of type 'const DirectX::PackedVector::XMUBYTEN4' (or there is no acceptable conversion)
を取得名前空間内
namespace DirectX{
namespace PackedVector{
bool operator==(const DirectX::PackedVector::XMUBYTEN4 & lhs, const DirectX::PackedVector::XMUBYTEN4 & rhs) {
if (lhs.x == rhs.x && lhs.y == rhs.y && lhs.z == rhs.z && lhs.w == rhs.w)
return true;
return false;
}
}
}
しかし、これは私にLNK2005がオブジェクトファイルに既に定義されているというメッセージを与えてくれます。
私はここで間違っていますが、どうすればこの演算子をオーバーロードできますか?
欠落インライン? –