【发布时间】:2013-07-28 17:32:44
【问题描述】:
这似乎是不可能的,但我想我还是会问。
我已经像这样定义了boost::variant:
typedef boost::variant<double, int, std::string> ConfigVariant;
稍后在我的代码中,我定义了一个std::map,如下所示:
std::map<std::string, ConfigVariant> my_map;
现在我希望能够在 my_map 中包含 std::map<std::string, ConfigVariant> 值。例如,我想这样做:
my_map[key1][key2] = "hello world";
我认为这是不可能的原因是因为看起来相应的变体定义看起来像这样:
typedef boost::variant<double, int, std::string, std::map<std::string, ConfigVariant> ConfigVariant;
既然做出这样的类型定义是不可能的,有什么办法可以解决这个问题吗?
【问题讨论】:
-
是的,使用(智能)指针。
-
也许我不明白这个问题,但
my_map的mapped_type是ConfigVariant,那么你怎么能把std::map<std::string, ConfigVariant>放到这张地图上呢?如果您希望能够这样做,my_map的类型必须是std::map<std::string, std::map<std::string, ConfigVariant>>