Извлечение значений из структуры данных, содержащей варианты типов данных, без указания типа возврата - PullRequest
0 голосов
/ 29 апреля 2019

В настоящее время я использую карту со строковым типом данных в качестве ключа и вариантное значение.Я полагаюсь на библиотеку boost :: variable для определения типа данных карты.В настоящее время я слежу за несколькими уроками по Boost :: Вариант для извлечения значений из карты без указания точного значения типа данных, которое я хочу получить при итерации по нему.source: https://theboostcpplibraries.com/boost.variant Я хочу что-то вроде последнего примера для универсального типа данных, но вместо того, чтобы печатать значения, я должен был их вернуть.Следующее ниже, кажется, не работает правильно.

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

Я также создаю экземпляр карты, заполняя ее строковым типом данных в качестве ключей, и тип boost :: variable в качестве значений;и позже переберите карту и обработайте значения.

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

1 Ответ

1 голос
/ 29 апреля 2019

Я хочу что-то вроде последнего примера для универсального типа данных, но вместо того, чтобы печатать значения, я должен был их возвращать.

Возможно, вы хотите иметь 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...