C ++

我想测试下面的示例代码,它解释了如何在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

请将text_archive.hpp中的标头和typedefs更改为多态,如下所示,以获取错误:

    #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

错误信息:

------开始构建:项目:TestSer4,配置:调试Win32 ------
编译...
test_primitive.cpp
c: program files boost boost_1_46_1 boost archive detail oserializer.hpp(88):error C2664:'void boost :: archive :: polymorphic_oarchive_impl :: save(const bool)':can not
将参数1从'const A'转换为'const bool'
没有可执行此转换的用户定义转换操作员,
或者操作员不能被呼叫
c: program files boost boost_1_46_1 boost archive detail oserializer.hpp(232):请参阅参考函数模板实例'void boost :: archive :: save_access :: save_primitive(Archive&,const T&)'正在编译

[
存档=的boost ::档案:: polymorphic_oarchive,
T =甲
]
c: program files boost boost_1_46_1 boost archive detail oserializer.hpp(308):参见函数模板实例化参考'void boost :: archive :: detail :: save_non_pointer_type :: save_primitive :: invoke(Archive& ,const T&)'正在被编译

[
存档=的boost ::档案:: polymorphic_oarchive,
T =甲
]
c: program files boost boost_1_46_1 boost archive detail oserializer.hpp(525):请参阅参考函数模板实例'void boost :: archive :: detail :: save_non_pointer_type :: invoke(Archive&,const T &)'正在编译

[
存档=的boost ::档案:: polymorphic_oarchive,
T =甲
]
c: program files boost boost_1_46_1 boost archive polymorphic_oarchive.hpp(122):参见正在编译的函数模板实例化'void boost :: archive :: save(Archive&,T&)'的引用

[
存档=的boost ::档案:: polymorphic_oarchive,
T =甲
]
c: program files boost boost_1_46_1 boost archive detail interface_oarchive.hpp(63):参见参考函数模板实例'void boost :: archive :: polymorphic_oarchive_impl :: save_override(const boost :: serialization :: nvp &,int)'正在编译

[
T =甲
]
c: program files boost boost_1_46_1 boost archive detail polymorphic_oarchive_route.hpp(171):参见参考函数模板实例'Archive&boost :: archive :: detail :: interface_oarchive :: operator <<(T&) '正在编译

[
存档=的boost ::档案:: 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 =提振::档案:: text_oarchive_impl,
T =甲
]
生成日志保存在“file:// C: apps proj Serilization BusSchedEx BusSchedEx Debug BuildLog.htm”
TestSer4 - 1错误,0警告(s)
==========构建:0成功,1失败,0最新,0跳过==========

请帮忙。


您不能将boost::serialization::primitive_type与多态归档一起使用。 请参阅此Boost票证以获取解释。

IMO在整个boost :: serialization想法中是一个真正的不可修复的概念错误。

链接地址: http://www.djcxy.com/p/60645.html

上一篇: c++

下一篇: Eclipse/Java code completion not working