我有一个名为error_code
的班级。我将它用作std::map
和CMap
(MFC)的密钥。我能够使其适用于std::map
,但不能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;
};
答案 0 :(得分:1)
快速跟踪显示下面的模板函数导致错误:
template<class ARG_KEY>
AFX_INLINE UINT AFXAPI HashKey(ARG_KEY key)
{
// default identity hash - works for most primitive values
return (DWORD)(((DWORD_PTR)key)>>4);
}
快速修复将涉及向用户定义的类型添加隐式转换函数。 我不确定将存储哪些数据,因此只需随机选择一些属性即可形成所需的数据。
class error_code {
...
operator DWORD_PTR() const
{
return hi;
}
...
}