Consider a boost::fusion
, and use the macro BOOST_FUSION_ADAPT_STRUCT()
to promote your structure to a fusion sequence (random access), e.g. once you've defined the above structure, you can do something like
BOOST_FUSION_ADAPT_STRUCT(
Object,
(std::string, a)
(int, b)
(long, c)
(char, d)
)
Now that it's been promoted, you can simply use a for_each
to iterate over the members, something like:
template<typename archive>
struct serializer {
serializer(archive& ar):ar(ar) {}
template<typename T>
void operator()(const T& o) const {
ar & o; // assuming binary for example...
}
archive& ar;
};
template<typename archive, typename sequence>
void serialize(archive& ar, sequence const& v) {
boost::fusion::for_each(v, serializer<archive>(ar));
}
To use, it should be as simple as:
Object foo; // instance to serialize
serialize(<archive>, foo);