Можно создать дубликат:
Boost Serialization using polymorphic archivesПовышение Сериализации с помощью базового указателя на производный класс
Я пытаюсь сериализации своих классов с использованием базового указателя на производный класс, но упорядочивает только базовый класс.
Я только что прочитал http://www.boost.org/doc/libs/1_32_0/libs/serialization/doc/special.html#registration, но и макрос экспорта, и функция регистрации ничего не изменили.
Рассмотрим следующее, очень простой, иерархия классов:
#include <iostream>
#include <fstream>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
class A
{
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
std::cout << "A!\n";
}
};
class B : public A
{
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& ar, const unsigned int version)
{
ar & boost::serialization::base_object<A>(*this);
std::cout << "B!\n";
}
};
int main()
{
std::ofstream of("mybin.bin");
boost::archive::binary_oarchive oa(of);
A* b = new B();
oa << b;
delete b;
return 0;
}
выход будет:
А!
Очевидно, что результат, который я ищу, - это A! B !. Есть ли способ, которым это может быть достигнуто?
EDIT: Хорошо, посмотрев соответствующую запись в комментариях, вот что происходит.
Был 3 вещи, чтобы изменить:
- класса А должен иметь виртуальную функцию так, что она считается полиморфный
- необходимости экспортировать производные классы. BOOST_CLASS_EXPORT (Б)
- габаритная < < б вместо габаритная < < * б
Он работает со стандартным binary_oarchive, а также polymorphic_binary_oarchive.
EDIT2: Когда я допустим b.cpp (.h) и main.cpp, результаты BOOST_CLASS_EXPORT в дублированных символов:
дубликат символа подталкивание :: архив :: подробнее :: extra_detail: : init_guid :: г
Должна ли функция сериализации быть «виртуальной»? – fefe
См. Мое редактирование, все еще не работающее с полиморфным архиватором и boost_class_export. – vdsf
@fefe: Нет такой функции, как функция виртуального шаблона. – vdsf