我已经定义了这个模板类结构:
我希望能将
然而,这种方法行不通,因为编译器无法将
template<typename T> struct Outer {
struct Inner { /* ...some stuff... */ };
};
我希望能将
Inner
对象放入unordered_map
中(实际上,并不是直接放入,而是将其容器放入其中,因此在unordered_map
的模板参数中直接指定哈希对象的方法并不好),因此我想为这些项目专门定制hash
类。然而,这种方法行不通,因为编译器无法将
Outer<T>::Inner
与在实例化hash
时指定的类型匹配:namespace std {
template<typename T> struct hash<typename Outer<T>::Inner > {
size_t operator ()( typename Outer<T>::Inner const & obj )
{ /* ...some stuff... */ }
};
};
有没有人知道这个问题的解决方案?
hash <Inner>
的特化,这与您如果根本没有编写任何特化时会遇到的错误相同。 - pqnethash<T>
应该是hash<T,void>
的原因,这样我们就可以对T
进行 SFINAE 测试以确定是否要对其进行特化:然而,这种方法很丑陋。我想知道基于概念的特化是否能解决这个问题?template<MyConcept X>struct hash<X>{
? - Yakk - Adam Nevraumont