2014-03-08 4 views
1

Каков самый простой способ реализовать вложенный словарь со строковыми клавишами и значениями string/int/dictionary?C++ Boost: простой вложенный словарь?

То, что я пытался до сих пор, это странно:
boost::fusion::map<std::string, boost:variant<std::string, int, boost::fusion::map<std::string, boost:variant<std::string, int>>>>

Это выглядит как он имеет глубину 2, а также, похоже, это, безусловно, не будет работать. Даже если это произойдет, я озадачен тем, как его использовать.

Любые идеи?

ответ

2

Вы можете определить это так,

template<int N> struct my_map { 
    typedef boost::variant<int, std::string, typename my_map<N-1>::type> value_type; 
    typedef std::map<std::string, value_type> type; 
}; 
template<> struct my_map<1> { 
    typedef boost::variant<int, std::string> value_type; 
    typedef std::map<std::string, value_type> type; 
}; 

Возможно замена std::map с boost::fusion::map, но, возможно, вы лучше с более простой конструкцией, с (смарт) указателей на прикован записи, которые становятся nullptr, когда вам необходимо прекратить.

Смежные вопросы