【发布时间】:2016-02-20 01:38:17
【问题描述】:
假设我们有以下类:
template <int i>
class S {
public:
enum class E : signed char {a, b, c};
// ...
};
现在我想为 E 提供一个哈希函数。以下工作:
namespace std {
template<>
struct hash<typename S<3>::E> {
size_t operator()(typename S<3>::E const& e) const { return 0; }
};
}
但如果我把它变成通用的,它就不会:
namespace std {
template<int i>
struct hash<typename S<i>::E> {
size_t operator()(typename S<i>::E const& e) const { return 0; }
};
}
// error C2764: 'i': template parameter not used or deducible in partial specialization 'std::hash<S<i>::E>'
如何确保始终能够为所有 i 散列 S::E?
【问题讨论】:
-
如果所有
S<i>都有E是某个其他单一类型的typedef 怎么办?i在一般意义上无法弄清楚。它并不完全相同,但这里有一些类似的答案。找到一个:stackoverflow.com/questions/6060824/…