幾個問題/問題:C++重寫哈希<T>對於T的派生類
- 下面的代碼沒有編制(見下面的評論)
- 我將不得不重寫了酒吧散列函數和如果我想讓他們返回id()作爲它們的哈希值,那麼也是Baz?
#include <functional>
class Foo
{
public:
Foo(short id);
short id() const;
private:
const short id_;
};
class Bar : public Foo {};
class Baz : public Foo {};
Foo::Foo(short id) :
id_(id)
{}
short Foo::id() const
{
return id_;
}
namespace std
{
template <> struct hash<Foo> //hash is not a class template
{ //explicit specialization of non-template std::hash
size_t operator()(const Foo& foo) const
{
return hash<short>()(foo.id()); //std::hash is not a template
}
};
}
'Foo :: id()'需要聲明爲'const'。 – 2014-10-27 01:26:01
這裏沒有重要的事情發生。 – 2014-10-27 01:27:06
你一定要專門爲所有類型的'std :: hash'專門化,它應該有特殊的行爲。 – Deduplicator 2014-10-27 01:28:06