处理包含boost :: variant <int,double,long =“” long =“”>作为值数据类型的映射

时间:2019-04-26 13:07:37

标签: c++

我有一个map数据结构,其中包含一个字符串作为键和多个数据类型作为值。我在实例化地图时填充了地图。我面临的问题是在遍历地图并尝试访问每个键的值时遇到了一些错误。我认为可能需要将返回值从variant强制转换为其实际数据类型。我真的不知道如何访问它。

这是地图的定义:map> mapToBeProcessed;

map<string,boost::variant<int,double, long long, string>> mapToBeProcessed;

for(auto &x: mapToBeProcessed)
{
  if(ini.hasField(x.first))
  {
    b << x.first << x.second;
  }
}

//

当我尝试访问地图的值时出现问题:x.second

1 个答案:

答案 0 :(得分:1)

您可以访问该变体,以将功能应用于活动成员。

struct stream_visitor {
    using result_type = void;
    template <typename T>
    void operator()(T& t) { os << name << t; }
    std::ostream & os;
    std::string name;
}

map<string,boost::variant<int,double, long long, string>> mapToBeProcessed;

for(auto &x: mapToBeProcessed)
{
  if(ini.hasField(x.first))
  {
    boost::apply_visitor(stream_visitor{ b, x.first }, x.second);
  }
}