Collections MFC:覆盖CMap的HashKey()的正确方法<&燃气轮机;物体?

Collections MFC:覆盖CMap的HashKey()的正确方法<&燃气轮机;物体?,collections,mfc,Collections,Mfc,我试图为MFC CMap类重写HashKey()函数。MFC第二版编程窗口第290页给出了一个函数示例,如:UINT AFXAPI HashKey(CString&string),并说明只使用特定类型。嗯,这只是导致了错误,在查找时,它现在似乎使用了模板。我们如何超越这些?例如: typedef uint32_t myint_t; CMap<myint_t, myint_t&, uint32_t, uint32_t&> m_MyCMap; typedef uint3

我试图为MFC CMap类重写
HashKey()
函数。MFC第二版编程窗口第290页给出了一个函数示例,如:
UINT AFXAPI HashKey(CString&string)
,并说明只使用特定类型。嗯,这只是导致了错误,在查找时,它现在似乎使用了
模板
。我们如何超越这些?例如:

typedef uint32_t myint_t;
CMap<myint_t, myint_t&, uint32_t, uint32_t&> m_MyCMap;
typedef uint32\u t myint\t;
CMap m_MyCMap;
我想覆盖
myint\u t
,但说它已经存在于
afxtempl.h

如果我必须覆盖所有
int
类型,我怎么能这样做呢?这是我使用的唯一一个CMap(据我所知,除非MFC内部也使用了一些CMap,我认为这是非常可能的)

那么,如何正确地覆盖给定类型的
CMap
HashKey()

蒂娅

的文档包含所有信息。这是一个函数模板,您需要提供与
ARG\u键
模板类型参数匹配的专门化(
myint\u t&
):

模板UINT AFXAPI HashKey(myint\u t&key)
{
// ...
}

标准C++规则适用。特别是,对于任何给定类型,您最多只能提供一个专门化。C++中的<代码> TyPulfF<代码>声明类型别名;它不会引入新类型,并且不能为相互别名的类型提供专门化


MFC中
CMap
的此扩展点是为自定义类型提供的。如果使用整数类型或基本MFC类型作为键,则需要接受MFC提供的哈希函数。这与标准容器(如
std::map

的行为基本相同。谢谢,我只尝试了myint\u t key,所以现在尝试了myint\u t&key,但仍然不喜欢它。它说:错误C2766:显式专门化;'UINT HashKey(ARG_KEY)“”已经用[ARG_KEY=UINT&]定义,这是预期的。您引入的不是用户定义的类型,而是整型的别名。