C++ Boost Serialization庫超詳細(xì)獎金額
一、說明
Boost.Serialization 也可以序列化指針和引用。因為指針存儲對象的地址,所以序列化地址沒有多大意義。當(dāng)序列化指針和引用時,被引用的對象被序列化。
二、示例代碼
示例 64.8。序列化指針
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <iostream>
#include <sstream>
std::stringstream ss;
class animal
{
public:
animal() = default;
animal(int legs) : legs_{legs} {}
int legs() const { return legs_; }
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version) { ar & legs_; }
int legs_;
};
void save()
{
boost::archive::text_oarchive oa{ss};
animal *a = new animal{4};
oa << a;
std::cout << std::hex << a << '\n';
delete a;
}
void load()
{
boost::archive::text_iarchive ia{ss};
animal *a;
ia >> a;
std::cout << std::hex << a << '\n';
std::cout << std::dec << a->legs() << '\n';
delete a;
}
int main()
{
save();
load();
}示例 64.8 使用 new 創(chuàng)建一個類型為 animal 的新對象,并將其分配給指針 a。指針——不是*a——然后被序列化。 Boost.Serialization 自動序列化 a 引用的對象而不是對象的地址。
如果存檔已恢復(fù),則 a 不一定包含相同的地址。創(chuàng)建一個新對象并將其地址分配給 a。 Boost.Serialization 只保證對象與序列化的對象相同,而不保證其地址相同。
因為智能指針與動態(tài)分配的內(nèi)存結(jié)合使用,所以 Boost.Serialization 也提供了對它們的支持。
示例 64.9。序列化智能指針
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/serialization/scoped_ptr.hpp>
#include <boost/scoped_ptr.hpp>
#include <iostream>
#include <sstream>
using namespace boost::archive;
std::stringstream ss;
class animal
{
public:
animal() = default;
animal(int legs) : legs_{legs} {}
int legs() const { return legs_; }
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version) { ar & legs_; }
int legs_;
};
void save()
{
text_oarchive oa{ss};
boost::scoped_ptr<animal> a{new animal{4}};
oa << a;
}
void load()
{
text_iarchive ia{ss};
boost::scoped_ptr<animal> a;
ia >> a;
std::cout << a->legs() << '\n';
}
int main()
{
save();
load();
}示例 64.9 使用智能指針 boost::scoped_ptr 來管理動態(tài)分配的動物類型對象。包含頭文件 boost/serialization/scoped_ptr.hpp 以序列化此類指針。要序列化 ??boost::shared_ptr 類型的智能指針,請使用頭文件 boost/serialization/shared_ptr.hpp。
請注意,Boost.Serialization 尚未針對 C++11 進(jìn)行更新。 Boost.Serialization 當(dāng)前不支持來自 C++11 標(biāo)準(zhǔn)庫的智能指針,如 std::shared_ptr 和 std::unique_ptr。
示例 64.10。序列化引用
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <iostream>
#include <sstream>
using namespace boost::archive;
std::stringstream ss;
class animal
{
public:
animal() = default;
animal(int legs) : legs_{legs} {}
int legs() const { return legs_; }
private:
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive &ar, const unsigned int version) { ar & legs_; }
int legs_;
};
void save()
{
text_oarchive oa{ss};
animal a{4};
animal &r = a;
oa << r;
}
void load()
{
text_iarchive ia{ss};
animal a;
animal &r = a;
ia >> r;
std::cout << r.legs() << '\n';
}
int main()
{
save();
load();
}Boost.Serialization 也可以毫無問題地序列化引用(參見示例 64.10)。與指針一樣,引用的對象會自動序列化。
到此這篇關(guān)于C++ Boost Serialization庫超詳細(xì)獎金額的文章就介紹到這了,更多相關(guān)C++ Serialization內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
c語言中十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示的實現(xiàn)方法
本篇文章對c語言中十六進(jìn)制轉(zhuǎn)二進(jìn)制顯示的實現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
詳解C語言編程中的函數(shù)指針以及函數(shù)回調(diào)
這篇文章主要介紹了C語言編程中的函數(shù)指針以及函數(shù)回調(diào),函數(shù)回調(diào)實際上就是讓函數(shù)指針作函數(shù)參數(shù)、調(diào)用時傳入函數(shù)地址,需要的朋友可以參考下2016-04-04

