12

boost::PropertyTreeのキーとしてファイル名を使用しようとしています

しかし '。' 「example.txt」などのファイル名に文字が含まれていると、プロパティ ツリー内に追加のレイヤーが追加されます。最も明白な解決策は、「。」を置き換えることです。ただし、エスケープ文字を使用するなど、これを行うためのより良い方法がある可能性があります。

次の例では、値 10 が「example」の子であるノード「txt」に入れられます。代わりに、ノード 'example.txt' に値 10 を格納したいと考えています。

ptree pt;
pt.put("example.txt", 10);

単一ノードに完全なファイル名を使用するにはどうすればよいですか?

よろしくお願いします。

4

2 に答える 2

12

ツリーを明示的に挿入するだけです:

pt.push_back(ptree::value_type("example.txt", ptree(10)));

このputメソッドは単に便宜上存在するため.、追加のレイヤーとして自動的に解析されます。上記のように value_type を明示的に構築すると、この問題を回避できます。

この問題を解決する別の方法は、区切り文字を変更するputとで追加の引数を使用することです。get

pt.put('/', "example.txt", "10");
pt.get<string>('/', "example.txt");

記録のために、私は人生でこのクラスを使用したことがありません。この情報はすべて、リンク先のページから入手しました。)

于 2009-12-22T20:02:12.663 に答える
8

問題は、ドキュメントが古かったことです。パス タイプ オブジェクトは、次のように区切り文字として指定されたファイル パスに対して無効な別の文字を使用して、次のように作成する必要があります。

pt.put(boost::property_tree::ptree::path_type("example.txt", '|'), 10);

Philippe Vaucher によって投稿されたニュースグループ gmane.comp.lib.boost.devel のブースト メーリング リストから、ソリューションへのパスを見つけました。

于 2010-02-17T17:34:53.387 に答える