See discussion on mailing list and related issue #187.
Minimal example provided by David Bond:
#include <cereal/archives/json.hpp>
#include <cereal/types/polymorphic.hpp>
#include <iostream>
struct Base {
virtual void foo() { }
template<class Archive> void serialize(Archive& archive) { }
};
struct Base2 {
virtual void foo() { }
std::string var;
template<class Archive> void serialize(Archive& archive) {
archive(cereal::make_nvp("var", var));
}
};
struct Derived : public Base2, public Base {
template<class Archive> void serialize(Archive& archive) {
archive(cereal::make_nvp("Base2",
cereal::base_class<Base2>(this)),
cereal::make_nvp("Base",
cereal::base_class<Base>(this)));
}
};
CEREAL_REGISTER_TYPE(Derived);
int main() {
auto ptr = std::make_shared<Derived>();
cereal::JSONOutputArchive ar(std::cout);
ar(cereal::make_nvp("ptr", std::dynamic_pointer_cast<Base>(ptr)));
return 0;
}
See discussion on mailing list and related issue #187.
Minimal example provided by David Bond: