Xml形式で保存/回復する派生シリアライザを追加しました。
GitHubへリリースしました。
他のシリアライザは要素名として変数名を用いるものが多いようですが、今回開発したXml派生シリアライザは型名を要素名とし、変数名は属性としました。
型の一致は常にチェックできると好ましいですが、変数名の一致は常にチェックできるのが好ましいとは限らないため、オプション扱いとしました。
使い方等については、ドキュメントを御覧ください。
また、関連IssueはIssue #41です。
補足
要素名に変数名を用いる考え方はどうもシリアライザとは相性が悪いように感じてました。
下記考察の結果、C++は静的型付け言語ですので、必ず変数は「型」を持ち、かつ、「型名」を決定できますので、Theolizerは要素名として型名を用いることに致しました。
- 直接保存/回復する変数
プログラマが直接保存/回復を指示する(Theolizerの場合、THEOLIZER_PROCESSで指定するもの)変数は保存時と回復時に一致させる必要はありませんし、一致させない使い方も多いです。
シリアライザを使わずに、普通にファイルにデータを保存する時、保存時と回復時の変数名を同じにするよう頑張る人はあまりいないと思います。同じ名前を使うこともあれば、別の変数へ回復することもあるでしょう。それと同じです。 - 配列の要素
配列全体の名前はありますが、要素1つ1つには名前がありません。
通常のXmlの場合、配列の要素1つ1つに付けるべき名前は、クラス名等のどちらかというと型名に近いです。 - ヒープ領域のオブジェクト
C++の場合、ヒープに記録している情報には変数名はそもそもありません。ポインタに名前はついてますが、その指す先の変数に名前があるとは限らないという意味です。
このようにしてみると、Xmlは本質的に「名前」のある情報のみを保存できる仕組みであり、その名前の付け方は、C++等のプログラミング言語とはかなり異なっているように感じます。
しかし、Xmlはたいへん柔軟な仕組みです。要素名として変数名を用いないといけないという決まりごとはありませんので、要素名には変数名でないものを付けても良いわけです。
htmlやxmlは、ユーザ定義のデータ構造は「静的型付け」ではなく「動的型付け」的な仕組みのため、要素名としては変数名を用いることは自然なのだと思います。
C++は静的型付け言語ですから、その慣習に違和感を感じていたのです。
更に補足
なお、派生シリアライザ自体の開発規模は小さいです。
ですので、要素名として変数名を用いるようなXml派生シリアライザの開発も可能です。
必要が生じた場合に検討したいと思います。