C ++访问unordered_map的值类型

时间:2017-04-04 15:29:22

标签: c++ typedef unordered-map

我正在查看Adobe分发的文件代码:

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)?

修改

any在c ++ 14中不可用(如答案中所述)。我在这种特殊情况下实现了自己的版本。

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

    base_t* ptr { nullptr };
};

1 个答案:

答案 0 :(得分:2)

std::any仅限于C ++ 17。 如果你想用C ++ 14编译它,可以使用boost lib中的boost::any calss