Hello,
I have a base class and a large number of derived classes that are all adapted as fusion sequences.
The intention is to serialize through the base pointer.
struct Base;
struct D_1 : public Base;
struct D_2 : public Base;
...
All the D_i are adapted as fusion sequences. Besides, there is an mpl vector of all the D_i called DVECTOR.
In a normal setting, I would have written this:
template <typename Archive>
void serialize(Archive& ar, Base& b, unsigned int )
{
ar & b.member1;
}
template <typename Archive>
void serialize(Archive& ar, D1& d, unsigned int )
{
ar & boost::serialization::base_object<Base>(d);
ar & d.memberd1;
}
BOOST_CLASS_EXPORT_KEY(D1)
and the same for all D_i. Then I would need BOOST_CLASS_EXPORT_IMPLEMENT for all the D_i as well in the relevant translation units.
The base_object part of serialize() is the same for all D_i
The D_i specific part of serialize(), I have the ability to generate with fusion meta functions.
This leads to a template function with 2 template arguments:
template <typename Archive, template Derived>
void serialize(Archive& ar, Derived& d, unsigned int )
{
ar & boost::serialization::base_object<Base>(d);
// fusion code to work on the Derived fusion sequence to generate a " ar & ... " line for each member of Derived
}
Robert, My question is about the BOOST_CLASS_EXPORT_KEY() and BOOST_CLASS_EXPORT_IMPLEMENT() macros.
Am I able to generate all of them from DVECTOR?
regards,