gpt4 book ai didi

c++ - 如果我想为自定义类型使用 tr1 无序映射,如何避免在我的 header 中使用哈希函数 impl?

转载 作者:行者123 更新时间:2023-11-30 02:02:30 25 4
gpt4 key购买 nike

我需要散列四种不同事物的组合,包括 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对于我的类型,结果是完整的哈希函数。有没有一种方法可以不将所有这些代码都放在标题中,但仍然为我的类(class)提供这个 HashMap ?

最佳答案

只需在头文件中声明函数,然后在 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 中使用哈希函数 impl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com