c++ - Microsoft GUID serialization using boost serialize? -
i have following:
struct member { guid id; int extra; template<class archive> void serialize(archive & ar, const unsigned int file_version) { ar & id; ar & extra; } }
when compile code following compile error:
error 25 error c2039: 'serialize' : not member of '_guid'
how specialise boost serialization microsoft guid?
here's hint: assuming uuid
type pod, can use make_binary_object
.
here's mockup type uuid
pod:
#include <array> using uuid = std::array<uint8_t, 16>; // mock static_assert(std::is_pod<uuid>(), "assumes uuid pod");
any pod do. e.g. boost::uuids::uuid
¹ pod. same struct uuid { char data[16]; }
etc.
non-intrusive serialization:
#include <boost/serialization/serialization.hpp> #include <boost/serialization/binary_object.hpp> namespace boost { namespace serialization { template <typename ar> void serialize(ar& ar, uuid& u, unsigned /*version*/) { ar & make_binary_object(&u, sizeof(u)); } } }
demo
#include <iostream> #include <boost/archive/text_oarchive.hpp> #include <boost/archive/text_iarchive.hpp> int main() { std::stringstream ss; { boost::archive::text_oarchive oa(ss); uuid u {{0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f}}; oa << u; } std::cout << ss.str() << "\n"; { boost::archive::text_iarchive ia(ss); uuid u {}; ia >> u; std::copy(begin(u), end(u), std::ostream_iterator<int>(std::cout << "roundtripped: ", " ")); } }
¹ although library defines serialization in boost/uuid/uuid_serialize.hpp
header
Comments
Post a Comment