2017-05-03 43 views
0

struct var能有一個成員std::unordered_map<var, var>是否有可能具有一個std :: unordered_map <類,第>作爲類的成員?

這裏是不是因爲編譯是hash<json::var>使用dict json_dict = dict();後聲明的代碼示例:

namespace json 
{ 
    struct var; 
    using dict = std::unordered_map<var, var>; 

    struct var 
    { 
     int integer = 0; 
     std::string string = ""; 
     dict json_dict = dict(); 
    } 
} 

namespace std 
{ 
    template<> struct hash<json::var> 
    { 
     std::size_t operator()(const json::var& k) const 
     { 
      return hash<string>()(k.string); 
     } 
    }; 
} 

是否有解決方案最好不使用指針?

回答

1

可以定義hash<json::var>::operator()定義json::var本身後:

namespace json 
{ 
    struct var; 
} 

namespace std 
{ 
    template<> struct hash<json::var> 
    { 
     // just a declaration: 
     std::size_t operator()(const json::var& k) const; 
    }; 
} 

namespace json 
{ 
    using dict = std::unordered_map<var, var>; 

    struct var 
    { 
     int integer = 0; 
     std::string string = ""; 
     dict json_dict = dict(); 
    }; 
} 

// definition: can access `json::var`'s members 
std::size_t std::hash<json::var>::operator()(const json::var& k) const 
{ 
    return k.integer; 
} 

live wandbox example


無關,但

string string = ""; 
dict json_dict = dict(); 

相當於

string string; 
dict json_dict; 
+1

我想補充一點,這隻能是因爲libc中++的'的std :: unordered_map'允許不完全類型。目前這不符合的libstdC++工作,例如。 –

相關問題