std :: unordered_set <Foo>作为类Foo的成员

dev*_*pal 5 c++ hash stl unordered-set explicit-specialization

我正在编写一个类,它有一个自己类型的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);
        }
    };
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

Jam*_*lis 8

Foo不能有类型的成员变量std::unordered_set<Foo>.

您无法实例化具有不完整类型的标准库容器.基本上,由于此处不相关的几个例外,类类型在}终止其定义之前是不完整的.

您可能需要在容器中存储其他类型(可能std::unique_ptr<Foo>),或者使用容器库来提供可实例化的不完整类型的容器(例如,Boost具有这样的容器库).