這個問題已經asked here和其他一些地方,但答案並不真正似乎解決最新Boost庫。如何使std :: shared_ptr使boost :: serialization工作?
爲了說明這個問題,假設我們要序列包含共享指針(std::shared_ptr
),具有靜態load
功能,將建立從一個文件中的類,並且將實例保存到一個文件save
功能沿着類:
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <fstream>
#include <memory>
#include <vector>
class A
{
public:
std::shared_ptr<int> v;
void A::Save(char * const filename);
static A * const Load(char * const filename);
//////////////////////////////////
// Boost Serialization:
//
private:
friend class boost::serialization::access;
template<class Archive> void serialize(Archive & ar, const unsigned int file_version)
{
ar & v;
}
};
// save the world to a file:
void A::Save(char * const filename)
{
// create and open a character archive for output
std::ofstream ofs(filename);
// save data to archive
{
boost::archive::text_oarchive oa(ofs);
// write the pointer to file
oa << this;
}
}
// load world from file
A * const A::Load(char * const filename)
{
A * a;
// create and open an archive for input
std::ifstream ifs(filename);
boost::archive::text_iarchive ia(ifs);
// read class pointer from archive
ia >> a;
return a;
}
int main()
{
}
上面的代碼生成開始c:\local\boost_1_54_0\boost\serialization\access.hpp(118): error C2039: 'serialize' : is not a member of 'std::shared_ptr<_Ty>'
錯誤的一個長長的清單,其中據我瞭解應該不是真的因爲我已加載其表面上支持std::shared_ptr
升壓shared_ptr
序列化庫。我在這裏錯過了什麼?
注:據我瞭解,我的假設boost/serialization/shared_ptr.hpp
定義的serialize
功能std::shared_ptr
是錯誤的,因此正確回答這個問題可能是,我想要麼必須定義std::shared_ptr
還是我自己serialize
功能轉換爲boost::shared_ptr
我是知道的;這是我的問題的基礎。 – arman
@ausairman然後你的問題不清楚。幽州「助推1.54,<...>是應該支持的std :: shared_ptr的」 - 這是不正確。 –
好的。我現在明確表示我正在嘗試使用'boost/serialization/shared_ptr.hpp'標頭。 – arman