提升序列化和命名空间

Posted

技术标签:

【中文标题】提升序列化和命名空间【英文标题】:Boost serialization and namespace 【发布时间】:2012-02-15 00:35:50 【问题描述】:

我是使用 Boost 序列化的新手。我正在使用 xml 序列化和非侵入式版本。我一步一步按照教程(来自 Boost 网站)进行操作,我的代码运行良好。

当我将我的类(代码分为 .h 和 .cpp 以及一个 main.cpp 文件)放入 命名空间 (ns_mytests) 时,问题就出现了。在这种情况下,编译器 (g++) 会报错,并且出现以下错误:

g++ -c -g test.o.d -o build/Debug/GNU-Linux-x86/sources/test.o sources/test.cpp
/opt/local/include/boost/serialization/split_free.hpp: In static member function 'static void boost::serialization::free_saver<Archive, T>::invoke(Archive&, const T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]':
/opt/local/include/boost/serialization/split_free.hpp:74:   instantiated from 'void boost::serialization::split_free(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]'
sources/test.h:117:   instantiated from 'void boost::serialization::serialize(Archive&, ns_mytests::Test&, unsigned int) [with Archive = boost::archive::xml_oarchive]'
/opt/local/include/boost/serialization/serialization.hpp:128:   instantiated from 'void boost::serialization::serialize_adl(Archive&, T&, unsigned int) [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]'
/opt/local/include/boost/archive/detail/oserializer.hpp:148:   instantiated from 'void boost::archive::detail::oserializer<Archive, T>::save_object_data(boost::archive::detail::basic_oarchive&, const void*) const [with Archive = boost::archive::xml_oarchive, T = ns_mytests::Test]'
sources/test.cpp:146:   instantiated from here
/opt/local/include/boost/serialization/split_free.hpp:45: error: no matching function for call to 'save(boost::archive::xml_oarchive&, const ns_mytests::Test&, const boost::serialization::version_type&)'
make[2]: *** [build/Debug/GNU-Linux-x86/sources/test.o] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

确定我做错了什么,但我找不到我的错误。

感谢任何帮助。

谢谢, 西叉

【问题讨论】:

它说得很清楚,它正在尝试调用签名为save(boost::archive::xml_oarchive&amp;, ns_mytests::Test const&amp;, boost::serialization::version_type const&amp;) 的函数——你有这样的函数吗?如果你这样做了,it 在哪个命名空间中? (Hinthint,显示你的代码,而不仅仅是你的错误。) 谢谢。是的,这是命名空间的问题。 【参考方案1】:

在定义要序列化类型的命名空间中定义非侵入式save

【讨论】:

不客气。如果有任何帮助,请随时正确标记答案。

以上是关于提升序列化和命名空间的主要内容,如果未能解决你的问题,请参考以下文章

删除不必要的命名空间(使用)指令是不是有性能提升?

反序列化 xml,包括命名空间

c# XmlSerializer 反序列化器缺少默认命名空间

Jackson XML - 使用命名空间前缀反序列化 XML

在 .NET 中序列化对象时忽略所有 xsi 和 xsd 命名空间?

在不修改 C# XSD 类的情况下向 XML 序列化添加前缀和命名空间