// // example of how to deserialize non default constructible objects // #include #include #include class MyData { // define your private data float _x{ 0 }; float _y{ 0 }; // make bitsery:Access friend friend class bitsery::Access; // create default constructor, don't worry about class invariant, it will be // restored in deserialization MyData() = default; // define serialize function template void serialize(S& s) { s.value4b(_x); s.value4b(_y); } public: // define non default public constructor MyData(float x, float y) : _x{ x } , _y{ y } { } // this is for convenience bool operator==(const MyData& rhs) const { return _x == rhs._x && _y == rhs._y; } }; // some helper types using Buffer = std::vector; using Writer = bitsery::OutputBufferAdapter; using Reader = bitsery::InputBufferAdapter; int main() { // initialize our data std::vector data{}; data.emplace_back(145.4f, 84.48f); std::vector res{}; // create buffer Buffer buffer{}; // we cant use quick (de)serialization helper methods, because we ant to // serialize container directly create writer and serialize container bitsery::Serializer ser{ buffer }; ser.container(data, 10); ser.adapter().flush(); // create reader and deserialize container bitsery::Deserializer des{ buffer.begin(), ser.adapter().writtenBytesCount() }; des.container(res, 10); // check if everything went ok assert(des.adapter().error() == bitsery::ReaderError::NoError && des.adapter().isCompletedSuccessfully()); assert(res == data); }