0

2つの主な目的で、コードの入力/ログファイルを作成することを検討しています。

1)必要に応じて将来同じ結果を再現できるように、コードが実行されたすべての主要なパラメーターをログに記録できるようにします。2)コード内のパラメーターをハードコーディングすることなく、コードを開始/再開できます。

コードと一緒にヘッダーファイルを簡単に運ぶことができるように、ヘッダーのみのアプローチに興味があります。これにより、boost.property_treeになりました。ドキュメントから、それは目的を果たしているようです。私の質問は、どのファイル形式が私のニーズに最も適しているかということです。私は何かが必要です:

1)人間が簡単に読み取り/編集できる2)ネストされたセクションをサポートできる3)コメントをサポートできる

デフォルトではxmlを使用していますが、boost.property_treeの解析機能を考慮すると、これが最適なオプションかどうかはわかりません。たとえば、次のようなものを解析できるようにしたいです。

<Grid Type = "AMR">
    <Domain> -1.0 1.0 -1.0 1.0 </Domain>
    <Levels> 10 5 </Levels>
    <Path> /path/to/data.bin </Path>
</Grid>

TypeプロパティDomain、、、、Levelsおよびセクションを正しく個別に読み取ることができるようにしたいPath(たとえばDomain、長方形のエッジに対応する4つの個別のフローティングポイントがあります)。私のコードは次のようになります:

using boost::property_tree::ptree;
ptree pt;

double x = pt.get<double>("Grid.Domain");

std::cout << x << std::endl;

しかし、私は取得し続けconversion of data to type "d" failedます。どうすれば修正できますか?また、xmlは私が持っている最良のオプションですか、それとも別の形式への変更を検討する必要がありますか?

4

2 に答える 2

0

boost::property_tree は、JSON との間のシリアライゼーション/デシリアライゼーションもサポートしています。JSON では配列が許可されているため、セクションに複数の値を格納するのは非常に簡単です。構造を JSON に保存することもできます (これは、プログラムからオブジェクトの状態を保持したい場合に便利です)。

重要な警告: boost::property_tree は値を内部的に文字列として扱うため、プログラムの外部で読み取られる可能性のある有効な JSON が必要な場合、boost::property_tree で作成した JSON から数値を直接読み取ることはできません。一種のキャスト (読み取りコードによる)。

永続化されたファイルに数値の型を保持することが重要な場合は、JSONCppをチェックしてください。私自身も使用していますが、非常に簡単に起動して実行でき、非常に軽量です。

JSONCpp はコメントもサポートしています。SourceForge ページから:

注: コメントは以前は JSON でサポートされていましたが、移植性のために削除されました (C のようなコメントは Python ではサポートされていません)。コメントは構成/入力ファイルで役立つため、この機能は保持されました。

于 2012-09-28T00:03:16.470 に答える
0

複数の値を処理する方法を見つけたと思います。1 つの方法は、全体を として読み、std::stringそれを使用しstd::istringstreamて各部分を非常に簡単に分離することです。このようなもの:

std::istringstream iss(pt.get<std::string>("Grid.Domain"));
double xmin, xmax, ymin, ymax;
iss >> xmin >> xmax >> ymin >> ymax;

かなりうまく機能します。Typeしかし、私はプロパティを取得する方法を知りません...

于 2012-09-27T22:06:26.143 に答える