我在我正在做的應用程序中有問題。我需要使用boost序列化序列化一些數據包。根據文檔,可以分別使用BOOST_CLASS_EXPORT_KEY
和BOOST_CLASS_EXPORT_IMPLEMENT
到.hpp和.cpp文件中,以便能夠使用多態基指針對派生類進行序列化。boost序列化和register_type
因此,這裏是我:
.HPP:containaing我班宣言和finaly的BOOST_CLASS_EXPORT_KEY(mynamespace::mypacket)
的.cpp:包含我的類定義和BOOST_CLASS_EXPORT_IMPLEMENT(mynamespace::mypacket)
一切都正常運行,直到這一點但是當需要序列化時,我得到一個bad_alloc錯誤。
我通過明確地調用我需要使用的存檔上的方法register_type<mypacket>()
來解決此問題。
但是,這裏是我的問題:boost的EXPORT *是爲了避免調用register_type方法還是我做錯了什麼?我覺得在我的代碼中做兩次相同的工作,但更重要的是,如果我們仍然必須在歸檔中使用register_type,則我不會看到使用export key + implement的任何優勢!
我在這裏和其他地方閱讀了一些其他帖子,似乎我不是唯一一個試驗這個問題的人,但我還沒有找到任何答案。
謝謝!如果可以的話,我會給你+10,你救了我的命!整天我有一些類的boost :: serialization :: extended_type_info :: get_key()'返回NULL。只有一些用於類,而另一些則完美地工作,並且它正確地返回字符串化的名稱。這就是原因!我沒有分兩步分出'EXPORT'進程!我只是在''.cpp'文件中使用'BOOST_CLASS_EXPORT(CLASS)',而不是'.cpp'中'.h'和'BOOST_CLASS_EXPORT_IMPLEMENT(CLASS)'中的'BOOST_CLASS_EXPORT_KEY(CLASS)'。 **再次感謝!!! ** :) – Avio
如果我對你和doc做同樣的事情,我會得到'void myclass :: serialize(...)的未定義引用。 – Shibli