我已经实现了OpenCVs Mat格式的序列化,如下所述:Serializing OpenCV Mat_<Vec3f>
我现在遇到了将序列化指向cv :: Mat的共享指针的问题。 它给出了以下错误:
/usr/include/boost/serialization/shared_ptr.hpp: In function ‘void boost::serialization::serialize(Archive&, boost::shared_ptr<U>&, unsigned int) [with Archive = boost::archive::text_iarchive, T = boost::shared_ptr<cv::Mat>]’:
/usr/include/boost/serialization/serialization.hpp:128:9
:
从'void&gt; boost :: serialization :: serialize_adl(Archive&amp;,T&amp;,unsigned int)实例化[使用Archive =&gt; boost :: archive :: text_iarchive,T = boost :: shared_ptr&gt;]' /usr/include/boost/archive/detail/iserializer.hpp:188:5:
实例化自'void&gt; boost :: archive :: detail :: iserializer :: load_object_data(boost :: archive :: detail :: basic_iarchive&amp;,void *,unsigned int)const [with Archive = boost :: archive :: text_iarchive,T = boost :: shared_ptr&gt;]' recognition2d3d.cpp:227:1: 从这里实例化
/usr/include/boost/serialization/shared_ptr.hpp:167:5:错误:静态断言失败:“boost :: serialization :: tracking_level&lt; T&gt; :: value!= boost :: serialization :: track_never “`
我尝试使用BOOST_CLASS_TRACKING,但无法使其正常工作。实际上我真的不明白问题所在,阅读boost文档并没有帮助解决这个问题。
答案 0 :(得分:0)
我认为你不能通过shared_ptr序列化,除非指向的对象有一个vtable。尝试将对象的析构函数设为虚拟。
编辑:或者,将对象(OpenCV矩阵?)包装在具有虚析构函数的对象中。