gpt4 book ai didi

c++ - 如何序列化融合::vector ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:59:25 26 4
gpt4 key购买 nike

告诉我,如何序列化/反序列化 fusion::vector 对象类型?

谢谢。

最佳答案

已解决。

像这样:http://liveworkspace.org/code/652cab59dc33d280b6d48470c11cfb91

#include <iostream>
#include <sstream>

#include <boost/fusion/algorithm/iteration/for_each.hpp>
#include <boost/fusion/include/for_each.hpp>
#include <boost/fusion/container/vector.hpp>
#include <boost/fusion/include/vector.hpp>
#include <boost/fusion/container/vector/vector_fwd.hpp>
#include <boost/fusion/include/vector_fwd.hpp>
#include <boost/fusion/container/generation/make_vector.hpp>
#include <boost/fusion/include/make_vector.hpp>
#include <boost/fusion/sequence/comparison/equal_to.hpp>
#include <boost/fusion/include/equal_to.hpp>

#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/serialization.hpp>

/***************************************************************************/

template<typename archive_type>
struct item_serializer {
item_serializer(archive_type& ar):ar(ar) {}

template<typename T>
void operator()(const T& o) const {
ar << o;
}
archive_type& ar;
};

template<typename archive_type, typename V>
archive_type& serialize_fusion_vector(archive_type& ar, const V& v) {
boost::fusion::for_each(v, item_serializer<archive_type>(ar));
return ar;
}

template<typename archive_type>
struct item_deserializer {
item_deserializer(archive_type& ar):ar(ar) {}

template<typename T>
void operator()(T& o) const {
ar >> o;
}
archive_type& ar;
};

template<typename archive_type, typename V>
archive_type& deserialize_fusion_vector(archive_type& ar, V& v) {
boost::fusion::for_each(v, item_deserializer<archive_type>(ar));
return ar;
}

/***************************************************************************/

int main() {
boost::fusion::vector<int, char, double> src(boost::fusion::make_vector(3, '4', 5.41)), dst;
std::ostringstream os;
{ boost::archive::binary_oarchive oa(os);
serialize_fusion_vector(oa, src);
}
std::istringstream is(os.str());
{ boost::archive::binary_iarchive ia(is);
deserialize_fusion_vector(ia, dst);
}

std::cout << ((src == dst) ? "is equal" : "is not equal") << std::endl;
}

/***************************************************************************/

关于c++ - 如何序列化融合::vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4664125/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com