我試圖用boost::serialization
序列化一個類,但是當派生類被聲明爲final
時它失敗。最終子類基類的Boost序列化錯誤
#include <fstream>
#include <boost/serialization/access.hpp>
#include <boost/serialization/base_object.hpp>
#include <boost/archive/binary_oarchive.hpp>
class Base {
public:
virtual ~Base() = default;
virtual void Foo() = 0;
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& archive, const unsigned int version) {}
};
class Derived final: public Base {
public:
void Foo() override {}
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& archive, const unsigned int version) {
archive & boost::serialization::base_object<Base>(*this);
}
};
int main() {
Derived foo;
std::ofstream output("output");
boost::archive::binary_oarchive archive(output);
archive << foo;
}
error: cannot derive from ‘final’ base ‘Derived’ in derived type ‘boost::detail::is_virtual_base_of_impl<Base, Derived, mpl_::bool_<true> >::boost_type_traits_internal_struct_X’ struct boost_type_traits_internal_struct_X : public Derived, virtual Base
如果final
specificator被省略沒有錯誤。這個錯誤的原因是什麼?它可以避免的原因是什麼?