如何为模板类实现std :: hash

时间:2017-04-26 10:51:02

标签: c++ c++11 templates

我有一个模板类,如下所示:

template <int N, class TypeId> class Indexer {
...
}

我希望在std::unordered_map中使用它,我需要一个哈希函数。 在代码库中我们已经有了类似的东西(但是在一个没有模板的类上)所以我试着这样做:

namespace std {
template <int N, class TypeId>
struct hash<Indexer<N, TypeId> > {
    size_t operator()(const Indexer<N, TypeId>& id) const noexcept {
        ...
    }
};
}

它与another answer非常相似。 不幸的是,这不起作用,只是给出了一堆无用的错误。任何见解?

1 个答案:

答案 0 :(得分:2)

看起来你在Indexer类定义的末尾错过了一个分号。

这有效:

#include <functional>

template <int N, class TypeId> struct Indexer {};

namespace std {
template <int N, class TypeId>
struct hash<Indexer<N, TypeId> > {
   size_t operator()(const Indexer<N, TypeId>& id) const noexcept { return 0; }
};
}

int main() {
   return 0;
}