сериализовать класс primitive_type, используя polymorphic_text_archive в boost

Я пытаюсь протестировать следующий пример кода, в котором объясняется, как сериализовать определенный пользователем класс примитивного типа в boost, он работает нормально, но если я переключусь на polymorphic_archive (тестирование с помощью polymorphic_text_ *), который мне придется использовать в моем проекте, он не компилируется, и я изо всех сил пытаюсь это исправить (тестирование в vc ++ 2008).

Весь код можно найти по следующим 3 ссылкам: http://www.boost.org/doc/libs/1_46_1/libs/serialization/test/test_primitive.cpp http://www.boost.org/doc/libs/1_46_1/libs/serialization/test/test_tools.hpp и libs / 1_46_1 / libs /serialization/test/text_archive.hpp

Пожалуйста, измените заголовки и typedef в text_archive.hpp на полиморфные, как показано ниже, чтобы получить ошибку:

    #include <boost/archive/polymorphic_text_oarchive.hpp>
    typedef boost::archive::polymorphic_text_oarchive test_oarchive;  
    #include <boost/archive/polymorphic_text_iarchive.hpp>  
    typedef boost::archive::polymorphic_text_iarchive test_iarchive;  

Используемые флаги препроцессора:

BOOST_ALL_DYN_LINK; BOOST_FILESYSTEM_NO_DEPRECATED; BOOST_FILESYSTEM_VERSION = 3

Сообщение об ошибке:

Пожалуйста помоги.

Вы не можете использовать полиморфные архивы вместе с

    #include <boost/archive/polymorphic_text_oarchive.hpp>
    typedef boost::archive::polymorphic_text_oarchive test_oarchive;  
    #include <boost/archive/polymorphic_text_iarchive.hpp>  
    typedef boost::archive::polymorphic_text_iarchive test_iarchive;  
. См. этот билет Boost для объяснения.


person P.G.    schedule 16.08.2011    source источник


Ответы (1)


ИМО, это настоящая неустранимая концептуальная ошибка во всей идее boost :: serialization.

------ Сборка началась: Проект: TestSer4, Конфигурация: Отладка Win32 ------
Компиляция ...
test_primitive.cpp
c: \ program files \ boost \ boostboost::serialization::primitive_type46_1 \ boost \ archive \ detail \ oserializer.hpp (88): ошибка C2664: 'void boost :: archive :: polymorphic_oarchive_impl :: save (const bool)': не удается
преобразовать параметр 1 из 'const A' в 'const bool'
Нет доступного пользовательского оператора преобразования, который мог бы выполнить это преобразование,
или оператор не может быть вызван
c: \ program files \ boost \ boostboost::serialization::primitive_type46_1 \ boost \ archive \ detail \ oserializer.hpp (232 ): см. ссылку на создание экземпляра шаблона функции 'void boost :: archive :: save_access :: save_primitive (Archive &, const T &)', который компилируется
с помощью
[
Archive = boost :: archive :: polymorphic_oarchive,
T = A
]
c: \ program files \ boost \ boostboost::serialization::primitive_type46_1 \ boost \ archive \ detail \ oserializer.hpp (308): см. ссылку на создание экземпляра шаблона функции 'void boost :: archive :: detail :: save_non_pointer_type :: save_primitive :: invoke (Archive &, const T &) 'компилируется
с помощью
[
Archive = boost :: archive :: polymorphic_oarchive,
T = A
]
c: \ program files \ boost \ boostboost::serialization::primitive_type46_1 \ boost \ archive \ detail \ oserializer.hpp (525): см. Ссылку на создание экземпляра шаблона функции void boost :: archive :: detail: : save_non_pointer_type :: invoke (Archive &, const T &) 'компилируется
с помощью
[
Archive = boost :: archive :: polymorphic_oarchive,
T = A
]
c: \ program files \ boost \ boostboost::serialization::primitive_type46_1 \ boost \ archive \ polymorphic_oarchive.hpp (122): см. ссылку на создание экземпляра шаблона функции 'void boost :: archive :: save (Archive &, T &)', скомпилированное
с
[
Архив = boost :: archive :: polymorphic_oarchive,
T = A
]
c: \ program files \ boost \ boostboost::serialization::primitive_type46_1 \ boost \ a rchive \ detail \ interface_oarchive.hpp (63): см. ссылку на создание экземпляра шаблона функции 'void boost :: archive :: polymorphic_oarchive_impl :: save_override (const boost :: serialization :: nvp &, int)', компилируемого
с использованием < br> [
T = A
]
c: \ program files \ boost \ boostboost::serialization::primitive_type46_1 \ boost \ archive \ detail \ polymorphic_oarchive_route.hpp (171): см. ссылку на создание экземпляра шаблона функции 'Archive & boost :: archive :: detail :: interface_oarchive :: operator ‹< (T &) 'компилируется
с помощью
[
Archive = boost :: archive :: polymorphic_oarchive,
T = const boost :: serialization :: nvp
]
c: \ apps \ proj \ serilization \ testser4 \ testser4 \ test_primitive.cpp (73): см. ссылку на создание экземпляра шаблона функции boost :: archive :: polymorphic_oarchive & boost :: archive :: detail :: polymorphic_oarchive_route :: operator ‹<> (const boost :: serialization :: nvp &) 'компилируется
с помощью
[
ArchiveImplementation = boost :: archive :: text_oarchive_impl,
T = A
]
Журнал сборки был сохранен в "file: // C: \ apps \ proj \ Serilization \ BusSchedEx \ BusSchedEx \ Debug \ BuildLog.htm "
TestSer4 - 1 ошибка (я), 0 предупреждений (я)
========== Сборка: 0 выполнено успешно, 1 не выполнено, 0 обновлено, 0 пропущено ==========

person n. 1.8e9-where's-my-share m.    schedule 17.08.2011