我需要对包含20个字节的四种不同事物的组合进行哈希处理,因此我定义了以下内容:
struct holder
{
char a;
uint16_t b;
uint64_t c;
char d[9];
} __attribute((__packed__));
然后我可以加载上面的其中之一并将其传递给哈希函数。因此,我希望我的类
Foo
具有std::tr1::unordered_map<holder, int> map
。但是为了声明它在Foo
的头文件中,我需要包括holder
的定义,在std::tr1
中针对我的类型的hash
的模板特殊化,并因此需要完整的哈希函数。有没有办法在 header 中没有所有这些代码,但仍然给我的类(class)这个哈希图? 最佳答案
只需在头文件中声明该函数,然后在cpp文件中对其进行定义。
看起来像:
// Header
namespace std { namespace tr1
// Define specialization
template<>
struct hash<holder>: unary_function<holder, size_t> {
// Declare member
size_t operator()(holder const&) const;
};
} }
// Source
// Define member
std::size_t std::tr1::hash<holder>::operator()(holder const&) const
{ /* implementation */ }
关于c++ - 如果要对自定义类型使用tr1无序映射,如何避免在 header 中包含哈希函数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13094377/