我意识到我需要将以下代码(用于模板专业化)放在CPP文件中而不是头文件中?有没有办法让它在头文件中实现?
如果将上述函数放置在error_code.h中,就会出现错误。
错误C2912:显式特化;'UINT HashKey(const error_code&)'不是函数模板的特化。
以下是关于为什么需要进行上述模板特化的一些参考资料。 http://www.codeproject.com/KB/architecture/cmap_howto.aspx。下面的代码摘自该文章,并且它是MFC源代码的一部分。
template<> inline UINT AFXAPI HashKey<const error_code &> (const error_code & e)
{
// Hash code method required for MFC CMap.
// This hash code generation method is picked from Joshua Bloch's
// Effective Java.
unsigned __int64 result = 17;
result = 37 * result + e.hi;
result = 37 * result + e.lo;
return static_cast<UINT>(result);
}
如果将上述函数放置在error_code.h中,就会出现错误。
错误C2912:显式特化;'UINT HashKey(const error_code&)'不是函数模板的特化。
以下是关于为什么需要进行上述模板特化的一些参考资料。 http://www.codeproject.com/KB/architecture/cmap_howto.aspx。下面的代码摘自该文章,并且它是MFC源代码的一部分。
// inside <afxtemp.h>
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);
}