2017-04-04 85 views
1

我在看由Adobe分发的文件的代码:C++的unordered_map的访问值类型

https://github.com/stlab/adobe_source_libraries/blob/00ec524725ebe41b77d6d5b5d796c056cdf08585/test/json/any_json_helper.cpp

我感兴趣的代码的部分是:

struct any_json_helper_t { 
    typedef any         value_type; 
    typedef string        key_type; 
    typedef string        string_type; 
    typedef unordered_map<key_type, value_type> object_type; 
    typedef vector<value_type>     array_type; 
    typedef object_type::value_type    pair_type; 

错误:

clang++ -o json json.cpp -std=c++14 
json.cpp:105:13: error: no type named 'value_type' in 'std::__1::unordered_map<std::__1::basic_string<char>, any, 
    std::__1::hash<std::__1::basic_string<char> >, std::__1::equal_to<std::__1::basic_string<char> >, 
    std::__1::allocator<std::__1::pair<const std::__1::basic_string<char>, any> > >'; did you mean simply 'value_type'? 
typedef object_type::value_type pair_type; 
     ^~~~~~~~~~~~~~~~~ 
     value_t 
json.cpp:100:17: note: 'value_type' declared here 
    typedef any value_type; 

我做错了什么? (它似乎隐含地使用any而不是value_type,因此找不到object_type::value_type)。我怎么能做这个工作(当然直接使用value_type,正如编译器所建议的那样)?

EDIT

any不是在C + + 14(如在一个答案提到的)可用。我在这个特例中实现了我自己的版本。

struct any 
{ 
public: 
    any() : ptr(nullptr) {} 
private: 
    struct base_t 
    { 
     virtual ~base_t() {} 
    }; 

    base_t* ptr { nullptr }; 
}; 

回答

2

class std::any只是自C++ 17以来。 如果你想使用C++ 14进行编译,你可以使用boost::anyboost lib

+0

对不起,我实现了我自己的;-)我应该提到的那......这可能是问题出在哪里? – user18490

+0

是的,可以在那里!请显示您的自定义'任何'类实现! – Rama

+0

我剥去了它,问题仍然存在...(请参阅编辑) – user18490