我写了一些模板类:
template <class T, class Allocator = ::std::allocator<T> >
class my_list;
我应该为这个类编写::std::hash特化。我该怎么做? 简单的部分特化:
namespace std {
template <class T, class Allocator>
class hash<my_list<T, Allocator> >{
public :
size_t operator()(const my_list<T, Allocator> &x ) const{
return ...;
}
};
}
但是我无法编写简单的部分特化,因为它被C++ ISO禁止:
ISO/IEC 14882 Third edition 2011-09-01
17.6.4.2.1 命名空间std [namespace.std]
2 如果一个C++程序声明...标准库类或类模板的任何成员类模板的显式或部分特化,其行为是未定义的。
我该怎么办?
std::swap
是一个函数模板,不是类模板。函数模板不能进行部分特化;这是语言规则所决定的,与std
无关。 - Angew is no longer proud of SO