hamigaki::uuid::serialize()
だいぶ体調も回復したので、今日は少しコーディングできました。
action_game.exeのキャラクタ定義はBoost.Serializationを使って書き出そうと考えているので、hamigaki::uuidをBoost.Serializationに対応させました。
差分
最初に書いたコードはこうでした。
class uuid { // ... private: boost::array<boost::uint8_t,16> data_; friend class boost::serialization::access; template<class Archive> void serialize(Archive& ar, const unsigned int version) { ar & boost::serialization::make_nvp("data", data_.elems); } };
ただ、これだとXMLで出力した際にdata_の各要素が<item>要素で表現されて冗長です。
いろいろ試した結果、結局こうなりました。
friend class boost::serialization::access; template<class Archive> void serialize(Archive& ar, const unsigned int version) { ar & boost::serialization::make_nvp( "data", boost::serialization::make_binary_object(data_.elems, 16) ); }
binary_objectを使うとtextまたはxmlのアーカイバではBase64エンコードされて出力されるようです。
ただ、Base64だと何書いてあるか分からないので、できればBase16で出力して欲しいところです。
アーカイバがテキストかバイナリかでserialize()関数を切り分けられたら便利なんですけどね。
一応、アーカイバ毎にserialize()の特別バージョンを用意すれば切り分け可能なんですが、そのためにアーカイバクラスのヘッダを全部のインクルードするのはあんまりなのでやってません。