boost :: mpi и boost: сериализация с помощью std :: варианта - PullRequest
1 голос
/ 24 мая 2019

c ++ 17 вводит новый тип std::variant.Можно ли определить процедуру сериализации, чтобы использовать std::variant в сочетании с boost::mpi?

Рассмотрим, например, простую программу

#include <variant>
#include <boost/mpi.hpp>
#include <boost/serialization/string.hpp>

namespace mpi = boost::mpi;

class A {
  friend class boost::serialization::access;

  template <class Archive>
  void serialize(Archive& ar, const unsigned int version)
  {
    ar & x;
    ar & y;
  }

public:
  int x, y;
};

class B {
  friend class boost::serialization::access;

  template <class Archive>
  void serialize(Archive& ar, const unsigned int version)
  {
    ar & z;
  }

public:
  int z;
};

int main()
{
  mpi::environment env;
  mpi::communicator world;

  std::variant<A, B> v;
  if (world.rank() == 0)
    v = B{1};
  mpi::broadcast(world, v, 0);

  return 0;
}

. Она не компилируетошибка

error: ‘class std::variant<A, B>’ has no member named ‘serialize’

Как правильно определить serialize член для std::variant?Обратите внимание, что оба типа A и B в приведенном выше примере имеют правильно определенный член сериализации.

...