从保存变量数据类型的数据结构中检索值,而不指定返回类型

问题描述 投票:0回答:1

我目前正在使用带有字符串数据类型的映射作为键和变量值。我依靠boost :: variant库来定义地图数据类型。我目前正在关注boost :: variant的一些教程,用于从地图中提取值,而不必在迭代时指定我想要检索的确切数据类型值。来源:https://theboostcpplibraries.com/boost.variant我想要类似通用数据类型的最后一个例子,但不是打印我返回它们的值。以下内容似乎无法正常工作。

struct output : public boost::static_visitor<>
{
  template <typename T>
  T operator()(T t) const { return t }
};

我还实例化一个地图,同时用字符串数据类型作为键和boost :: variant类型作为值填充它;然后迭代遍历地图并处理值。

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

for(auto &x: _keyPairValue)
{
  // appending a key pair value to a bson object which is part of mongo sdk
  b << x.first << boost::apply_visitor(output{},x.second);
}
c++ boost
1个回答
1
投票

我想要像通用数据类型的最后一个例子,但不是打印我返回它们的值。

您可能希望operator()重载,例如:

struct process : public boost::static_visitor<>
{
  void operator()(double d)
  {
      // process d ...
  }
  void operator()(char c)
  {
       // process c ...
  }
  void operator()(const string& s)
  {
      // process s ...
  }
};

int main()
{
  boost::variant<double, char, std::string> v;
  v = 3.14;
  boost::apply_visitor(process{}, v);
  v = 'A';
  boost::apply_visitor(process{}, v);
  v = "Boost";
  boost::apply_visitor(process{}, v);
}
© www.soinside.com 2019 - 2024. All rights reserved.