読者です 読者をやめる 読者になる 読者になる

boost-1.32.0

http://www.boost.org/
正式にリリースされたらしく。
ぱっと見Serialization Libraryがとても役に立ちそうな印象。独自のデータ保存形式はパーサ書くのが面倒だし、XML扱うライブラリなんかを使っても、ファイルから読み込んだ後は名前に対応するデータを文字列から変換して取り込んでいく泥臭い作業が待ち受けている。そういうのから解放してくれそうなのがこれ。
XMLのサンプルがわかりやすくないので、簡単な使用例。

#include 
#include 
#include 
#include 

class vector4
{
private:
	friend class boost::serialization::access;
	friend std::ostream& operator<<(std::ostream &os, const vector4 &v);

	template
	void serialize(Archive & ar, const unsigned int version)
	{
		// BOOST_SERIALIZATION_NVPは名前と値のペアを作るマクロ。
		// boost::serialization::make_nvp("hoge", hoge)の簡略。
		ar & BOOST_SERIALIZATION_NVP(x);
		ar & BOOST_SERIALIZATION_NVP(y);
		ar & BOOST_SERIALIZATION_NVP(z);
		ar & BOOST_SERIALIZATION_NVP(w);
	}

	float x, y, z, w;

public:
	vector4() : x(0), y(0), z(0), w(1) {}
	vector4(float _x, float _y, float _z, float _w=1) : x(_x), y(_y), z(_z), w(_w) {}
};

std::ostream& operator<<(std::ostream &os, const vector4 &v)
{
	return os << v.x << ", " << v.y << ", " << v.z << ", " << v.w;
}

int main()
{
	{
		std::ofstream ofs("filename");
		boost::archive::xml_oarchive oa(ofs);

		vector4 v(0, 1, 2);
		oa << boost::serialization::make_nvp("vector4", v);
	}
	{
		std::ifstream ifs("filename", std::ios::binary);
		boost::archive::xml_iarchive ia(ifs);
		vector4 v;
		ia >> boost::serialization::make_nvp("vector4", v);

		std::cout << v << std::endl;
	}

	return 0;
}

他にはString Algorithms Libraryあたりも面白そうだ。