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
and B
在上面的示例中,有一个正确定义的序列化成员。
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)