gpt4 book ai didi

c++ - 对象作为 CMap 中的键

转载 作者:太空狗 更新时间:2023-10-29 23:09:35 27 4
gpt4 key购买 nike

我有一个名为 error_code 的类。我将它用作 std::mapCMap (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;
};

最佳答案

快速跟踪显示下面的模板函数导致了错误:

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;
}

...
}

关于c++ - 对象作为 CMap 中的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4591579/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com