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

标签 c++ stl hash 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);
        }
    };
}

提前致谢

最佳答案

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

您不能实例化具有不完整类型的标准库容器。基本上,除了此处不相关的几个异常(exception),类类型直到 } 才完成。终止其定义。

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

关于c++ - std::unordered_set<Foo> 作为类 Foo 的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8781892/

相关文章:

c++ - 重载 operator-、operator< 和 operator >

c++ - 如何使用 RTTI 确定代码的行为

ruby - 以类似表格的格式输出哈希值

调用 header 中定义的模板函数时出现 C++ 链接器错误

c++ - 如何用STL重构这段代码?

c++ - 枚举类型的 Notype 模板的特化 - 错误 : template argument is invalid

python - 在python中生成文件哈希

php - 批量密码哈希 PHP-LOGIN 项目代码

c++ - 是否可以从 log4j 或 log4cxx 等文件配置 spdlog?

c++ - linux C++定时器周期回调