Use split to change into save/load. Robert Ramey Sebastian Knopp wrote:
Hello,
I am a new user of the serialization library and find it is a very comfortable solution. But I met a problem concerning the serialization of bit fields. For example, look at the following:
struct A { int a : 1; int b : 7; };
Serialization using the following code does not work, because bitfields can not be passed by reference.
template<class Archive> void serialize(Archive& ar, A& theA, const unsigned int version) { ar & make_nvp("a", theA.a); ar & make_nvp("b", theA.b); }
So, I use this workaround:
template<class Archive> void serialize(Archive& ar, A& theA.a, const unsigned int version) { bool myA; int myB; if (!Archive::is_loading::value) { myA = (theA.a == 1); myB = theA.b; } ar & make_nvp("a", myA); ar & make_nvp("b", myB); if (Archive::is_loading::value) { theA.a = myA ? 1 : 0; theA.b = myB; } }
Do you have any suggestions how a more elegant solution could look like?
Thanks and bye, Sebastian Knopp