专门用于成员结构的std模板

时间:2013-04-01 19:26:40

标签: c++ c++11 std

我想要一个具有以下结构的类:

class A {
public:
  struct key_type {};

private:

  std::unordered_map<key_type, some_other_type> m;

}

据我了解,为了完成这项工作,我需要在宣布std::hash之前专注std::equal_toA::m,但在声明A::key_type之后,这使得无法实现,因为我无法在 A中专门化模板。 Afaik,也无法转发声明(在A的定义之外)A::key_type

基本上我的问题是:我错过了什么,或者这种结构是不可能的?

1 个答案:

答案 0 :(得分:1)

有几种方法可以解决这种情况。

  1. 定义单独的类型。

    struct A_key_type {};
    namespace std {
        template <> struct hash<A_key_type> { size_t operator()(const A_key_type&); };
    }
    
    class A {
        typedef A_key_type key_type;
        std::unordered_map<key_type, int> m;
    };
    
  2. 提供明确的自定义哈希类型。

    class A {
        struct key_type {};
        struct key_type_hasher { size_t operator()(const key_type&); };
        std::unordered_map<key_type, int, key_type_hasher> m;
    };