2017-04-04 2 views
1

Je cherche le code d'un fichier distribué par Adobe:C++ type accès à la valeur d'un unordered_map

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

La partie du code que je suis intéressé est:

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; 

Erreur:

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; 

Est-ce que je fais quelque chose de mal? (il semble utiliser implicitement any au lieu de value_type et ne peut donc pas trouver object_type::value_type). Comment pourrais-je faire ce travail (en plus d'utiliser value_type directement, bien sûr, comme suggéré par le compilateur)?

EDIT

any ne sont pas disponibles en C++ 14 (tel que mentionné dans une réponse). J'ai implémenté ma propre version dans ce cas particulier.

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

    base_t* ptr { nullptr }; 
}; 

Répondre

2

la classe std::any est seulement depuis C++ 17. Si vous voulez le compiler avec C++ 14, vous pouvez utiliser boost::any calss de boost lib

+0

Désolé j'ai mis en place mon propre ;-) J'aurais dû mentionner que ... et cela pourrait être où le problème est? – user18490

+0

Oui, pourrait être là! Montrez votre implémentation personnalisée de n'importe quelle classe svp! – Rama

+0

Je l'ai dépouillé, et le problème est toujours là ... (voir edit) – user18490