我正在编写一个类,该类具有自己类型的 unordered_set 作为成员。
因此我需要为 hash<Foo>
编写特化.这个特化需要在声明 Foo 之后定义。但在我看来,好像我已经需要 hash<Foo>
的特化了。在定义成员之前 unordered_set<Foo>
.至少它不会编译并在那里失败。我尝试了哈希模板的前向声明,但也无法使其正常工作。
相关代码片段为:
class Foo {
public:
int i;
std::unordered_set<Foo> dummy;
Peer(std::unordered_set<Foo>);
};
namespace std {
template<> struct hash<Foo>
{
size_t operator()(const Foo& f) const
{
return hash<int>()(f.i);
}
};
}
提前致谢
最佳答案
Foo
不能有 std::unordered_set<Foo>
类型的成员变量.
您不能实例化具有不完整类型的标准库容器。基本上,除了此处不相关的几个异常(exception),类类型直到 }
才完成。终止其定义。
您需要在容器中存储一些其他类型(可能是 std::unique_ptr<Foo>
),或者使用容器库来提供可实例化不完整类型的容器(例如,Boost 有这样的容器库)。
关于c++ - std::unordered_set<Foo> 作为类 Foo 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8781892/