3
나는 error_code
이라는 클래스가 있습니다. 나는 std::map
과 CMap
(MFC)의 열쇠로 사용한다. std::map
에 대해서는 작동 가능하지만, CMap
에 대해서는 작동하지 않습니다. 내가 어떻게 그렇게 할 수 있는지 알 겠어?CMap의 키 객체
// OK!
std::map<error_code, int> m;
m[error_code(123)] = 888;
// error C2440: 'type cast' : cannot convert from 'error_code' to 'DWORD_PTR'
CMap <error_code, error_code&, int, int& > m;
m[error_code(123)] = 888;
class error_code {
public:
error_code() : hi(0), lo(0) {}
error_code(unsigned __int64 lo) : hi(0), lo(lo) {}
error_code(unsigned __int64 hi, unsigned __int64 lo) : hi(hi), lo(lo) {}
error_code& operator|=(const error_code &e) {
this->hi |= e.hi;
this->lo |= e.lo;
return *this;
}
error_code& operator&=(const error_code &e) {
this->hi &= e.hi;
this->lo &= e.lo;
return *this;
}
bool operator==(const error_code& e) const {
return hi == e.hi && lo == e.lo;
}
bool operator!=(const error_code& e) const {
return hi != e.hi || lo != e.lo;
}
bool operator<(const error_code& e) const {
if (hi == e.hi) {
return lo < e.lo;
}
return hi < e.hi;
}
unsigned __int64 hi;
unsigned __int64 lo;
};
그러나 'hi'가 같지만 'lo'가 다른 경우 어떻게해야합니까? –
또한 'hi'와 'lo'는 64 비트입니다. –
오브젝트를 고유하게 식별하는 것을 선택하십시오. YeenFei는 그것을 언급하는 것을 잊었다. – RedX