2

それで、ここで参照されている「きれいな印刷」トリミング空白フラグを見つけました:boost::property_tree XML pretty printing

そして、Boost::Property_Tree 1.50 の read_xml() 関数のドキュメントを見つけました: http://www.boost.org/doc/libs/1_50_0/doc/html/boost/property_tree/xml_parser/read_xml_id1073248.html

しかし、XML を読み込んでから書き出すときに、無視コメントとトリム空白フラグの両方を有効にする方法を一生理解できません。どんな助けでも大歓迎です。

私の主な問題は、関数プロトタイプにあると思います。関数プロトタイプが要求しているように、使用されるフラグはどのように int に変換されますか?

4

1 に答える 1

4

フラグをビットごとの OR (垂直バー文字|) で接続する必要があります。1 つの引数を使用して複数のフラグを指定するのは、かなり一般的な方法です。例えば:

#include <boost/property_tree/ptree.hpp>
#include <boost/property_tree/xml_parser.hpp>

int main(int argc, char* argv[])
{
    ptree pt;
    using namespace boost::property_tree::xml_parser; // just to keep the flags nice and short

    read_xml("file.xml", pt, trim_whitespace | no_comments);
    return 0;
}    

2 番目の質問については、フラグが int として宣言されています。ビット単位の OR を実行すると、int を表すビットが結合されて、一意の値を持つ新しい int が作成されます。たとえば、数値 2 はビット (バイナリ) 表現 00000010 を持ち、数値 4 はビットごとの表現 00000100 を持ちます (整数を表すために 8 ビットを使用していると仮定します)。ビットごとの or 演算は各ビットを比較し、どちらかが 1 か両方が 1 の場合、結果は 1 です。それ以外の場合は 0 です。私たちの場合には:

  00000010
| 00000100
----------
  00000110

これは、ビット表記の 6 です。

于 2012-10-25T20:05:26.713 に答える