Я понимаю, что я должен поставить нижеприведенный код (для специализации шаблона) в файл CPP вместо файла заголовка? Есть ли способ сделать это в файле заголовка?Специализация шаблона в файле заголовка
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);
}
Ну, что такое неспециализированная версия? – GManNickG