c++ - 处理包含 boost::variant<int, double,long long> 作为值数据类型的映射

标签 c++

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

这是 map 的定义: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;
  }
}

//

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

最佳答案

您可以访问变量,将函数应用于事件成员。

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);
  }
}

关于c++ - 处理包含 boost::variant<int, double,long long> 作为值数据类型的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55868323/

相关文章:

c++ - 递归函数,将链表的末尾附加到另一个链表的开头,并返回指向新列表开头的指针

c++ - 如果使用 {},函数调用不会产生歧义

C++ 如何将十进制数转换为二进制数?

c++ - 用户定义类型的 vector

c++程序在运行时停止工作

c++ - STL 中 next_permutation 的 Python 实现

c++ - 使用新的 C 和 C++ 标准的 POSIX 多线程会发生什么?

c++ - 如何在位集中存储更大的二进制数 (C++)

c++ - 初始化模板化、递归、POD 结构

c++ - CRTP 避免动态多态性