Boost.Serializationを真似て作ったシリアライザ
現状はJsonのみ対応
mkdir build
cd build
cmake ..
make
./sample
boostのシリアライザがどうなっているのか気になったので、似たような挙動のシリアライザを作成してみました。
簡単な記述を追加するだけで、クラスの変数をJson形式で保存、読み込みしてくれます。
はじめに、以下のファイルをインクルードします。
#include "fileio_json.hpp"
例えば、以下のようなクラスにおいて、
class Sample {
public:
Sample():value({1,2,3}){}
private:
std::vector<double> value;
};
以下のような記述を追加すれば、
class Sample {
public:
Sample():value({1,2,3}){}
private:
std::vector<double> value;
//ここを追加
protected:
friend class access;
template<class T>
void serialize(T &ar) {
ar & ARCHIVE_NAMEDVALUE(value);
}
//ここまで追加
};
以下のようなコードでJsonの保存、読み込みができます。
int main(){
//検証用データを作成
Sample sample;
//データをJson化
JsonOutputArchive ar_out;
ar_out << sample;
std::string json_str = ar_out.commit();
//Jsonデータをロード
JsonInputArchive ar_in(json_str);
ar_in>>sample;
return 0;
}
作成されるJsonは、以下のようになります。
[{"value":[1,2,3]}]
黄色いところが、Json専用のコードです。
未作成ですが、この部分を差し替えることで、xmlなど色々なフォーマットに切り替えられます。