9 c++ serialization boost visual-studio-2008
我的结构:
struct member{
std::string ip_address;
std::string port;
protected:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & ip_address;
ar & port;
}
};
Run Code Online (Sandbox Code Playgroud)
当我使用它来保存和加载它完美地工作时,所有的数据都是我所期望的,
std::vector<member> members;
std::ostringstream ss;
boost::archive::text_oarchive oa(ss);
oa<<members;
std::istringstream ss_(received_data.data());
boost::archive::text_iarchive ia(ss_);
ia>>members;
Run Code Online (Sandbox Code Playgroud)
但在编译时我得到了这个警告
warning C4308: negative integral constant converted to unsigned type
1> c:\program files\boost\boost_1_51\boost\serialization\static_warning.hpp(92) : see reference to class template instantiation 'boost::mpl::print<T>' being compiled
1> with
1> [
1> T=boost::serialization::BOOST_SERIALIZATION_STATIC_WARNING_LINE<98>
1> ]
1> c:\program files\boost\boost_1_51\boost\archive\detail\check.hpp(98) : see reference to class template instantiation 'boost::serialization::static_warning_test<B,L>' being compiled
1> with
1> [
1> B=false,
1> L=98
1> ]
1> c:\program files\boost\boost_1_51\boost\archive\detail\oserializer.hpp(313) : see reference to function template instantiation 'void boost::archive::detail::check_object_tracking<T>(void)' being compiled
1> with
1> [
1> T=std::vector<member>
1> ]
1> c:\program files\boost\boost_1_51\boost\archive\detail\oserializer.hpp(525) : see reference to function template instantiation 'void boost::archive::detail::save_non_pointer_type<Archive>::invoke<T>(Archive &,T &)' being compiled
1> with
1> [
1> Archive=boost::archive::text_oarchive,
1> T=std::vector<member>
1> ]
1> c:\program files\boost\boost_1_51\boost\archive\detail\common_oarchive.hpp(69) : see reference to function template instantiation 'void boost::archive::save<Archive,T>(Archive &,T &)' being compiled
1> with
1> [
1> Archive=boost::archive::text_oarchive,
1> T=std::vector<member>
1> ]
1> c:\program files\boost\boost_1_51\boost\archive\basic_text_oarchive.hpp(80) : see reference to function template instantiation 'void boost::archive::detail::common_oarchive<Archive>::save_override<T>(T &,int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_oarchive,
1> T=std::vector<member>
1> ]
1> c:\program files\boost\boost_1_51\boost\archive\detail\interface_oarchive.hpp(63) : see reference to function template instantiation 'void boost::archive::basic_text_oarchive<Archive>::save_override<T>(T &,int)' being compiled
1> with
1> [
1> Archive=boost::archive::text_oarchive,
1> T=std::vector<member>
1> ]
1> c:\users\user\desktop\shve\shve\member_server.h(58) : see reference to function template instantiation 'Archive &boost::archive::detail::interface_oarchive<Archive>::operator <<<std::vector<_Ty>>(T &)' being compiled
1> with
1> [
1> Archive=boost::archive::text_oarchive,
1> _Ty=member,
1> T=std::vector<member>
1> ]
Run Code Online (Sandbox Code Playgroud)
rha*_*oto 16
升压很紧张,因为你是归档非const类的实例,其可能,如果不同的跟踪对象使用相同的地址会导致与目标跟踪问题.
要删除警告,您可以将对象强制转换为const:
oa << const_cast<const std::vector<member>&>(members);
Run Code Online (Sandbox Code Playgroud)
或者你可以简单地使用&运算符:
oa & members;
Run Code Online (Sandbox Code Playgroud)
这是这个特殊(和普通)案件中警告的来源.通常,这种类型的编译器警告是由Boost专门通过调用BOOST_STATIC_WARNING宏生成的,因此原因可能是Boost希望您小心的任何事情.这通常在宏调用附带的注释中拼写出来(您可以从编译器错误消息中找到).例如,对此特定警告的调用来自boost\archive\detail\check.hpp:
// saving an non-const object of a type not marked "track_never)
// may be an indicator of an error usage of the
// serialization library and should be double checked.
// See documentation on object tracking. Also, see the
// "rationale" section of the documenation
// for motivation for this checking.
BOOST_STATIC_WARNING(typex::value);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2918 次 |
| 最近记录: |