問題タブ [yaml-cpp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
85 参照

yaml-cpp - マップ エントリを整列する方法

コロンが垂直に表示されるようにマップの線を揃える方法はあるのだろうか?

私は SetIndent() と SetLocalIndent() を試しましたが、今では目に見える効果があります。

ありがとう

0 投票する
1 に答える
1389 参照

yaml-cpp - yaml-cppを使用して複雑なデータ構造を出力するにはどうすればよいですか?

この質問は、主にyaml-cppの使用法に関する質問をここに投稿するように要求したyaml-cppの作成者(Jesse Beder)を対象としています。

yaml-cppドキュメントを含む多くの場所で、 http: //code.google.com/p/yaml-cpp/wiki/HowToEmitYAML#Using_Existing_Nodes

yaml-cppはメモリ内の既存のYAML::Nodeオブジェクトを変更する方法を提供しないとおっしゃいましたが、メモリ内のYAMLを変更するための提案は次のとおりです。

  1. 独自のデータ構造を使用してYAMLをメモリに保存し、シリアル化時にyaml-cppにフィードバックします(これは基本的にYAML :: Nodeでのポリモーフィズムの再実装に要約され、yamlの多くの再実装と大差ありません- cpp)、または

  2. 「現在、これを行うための最良の方法は、エミッターを使用して、ノードの子から選択することです」、つまり、ドキュメントに示されている例です。このアプローチの問題は、最も単純な場合にのみうまく機能することです。マップの要素の1つ自体がリストである、一連のマップに要素を追加したいとしますか?これは非常に迅速に任意に複雑になる可能性があります!新しいデータを挿入する場所を見つけ、マニピュレータを出力します。これはすべて「手作業」で行う必要があります。

問題を悪化させるために、エミッターはフォーマッターであり、その唯一の出力は文字列であるため、私の唯一のオプションは、変更を加えたYAMLドキュメント全体を出力し、それを新しいメモリ内表現に再解析することです。ドキュメントに多くの変更を加えている場合、この操作の効率のフットプリントはすぐに増加します。

既存のノードの変更には実装上の課題があることを理解しています(ノードのデータまたは子ノードのデータへの既存の参照をどのように処理しますか?)。ただし、新しい独立したノードをオンザフライで作成してメモリ内ツリーに挿入できるようにすることは、少なくとも簡単なことのように思えます。これは、たとえば、JsonCppの実装方法です:http: //jsoncpp.sourceforge.net

これにより、少なくとも、文書化した「エミッター」アプローチが、非効率的である場合でも、実行可能な回避策となる可能性があります。

これらの問題についてご意見をいただければ幸いです。残念ながら、これらの制限は非常に厳しく、yaml-cppが唯一のC ++ / OO YAMLライブラリであることを考えると、JSONに切り替える以外に実用的な代替手段があるのではないかと思います。

よろしくお願いします!

0 投票する
1 に答える
948 参照

yaml-cpp - bool の operator>> をオーバーロードする方法

スカラーをブールとして解析したい。この例は機能します:

しかし、より複雑なケースでは、テンプレート演算子が使用されます:

そして、文字列が「はい」または「いいえ」でない場合、「YAML::InvalidScalar」を取得します。

0 投票する
1 に答える
671 参照

c++ - yaml-cpp、YAML::Node、およびテンプレート オペレーター >>

yaml-cppを使用してある種のシリアル化を行っています。これを機能させるには、各クラスでシグネチャを使用してメソッドを宣言する必要があります。

これTは、保存時と読み込み時の別のクラスです。2 つのクラスのインターフェイスは同じですが、ほとんどのメソッドがテンプレートであるため、抽象基本クラスを作成できません。この部分は正常に動作しています。私はそれを と で接続しようとYAML::Nodeoperator>>ましYAML::Emitteroperator<<

についてoperator<<は、非常に残酷ではありますが、実用的な解決策があります。まず、シリアライズ可能なすべてのクラスのスーパークラスを宣言します。

次に、次を使用できますoperator<<

これreinterpret_castはかなり恐ろしく見えますが、今のところ機能しており、合法であるかどうかさえわかりません. についても同じことを試みましたが、うまくいきませoperator>>んでした。次のようになります。

しかし、gcc (4.6.2) と clang(2.9) はどちらもそれを無視し、operator>>nodeimp.h (yaml-cpp の一部) で定義されたものを使用します。

私の質問は次のとおりです。これをどのように解決すればよいですか?私が絶対に望んでいるのは、シリアライゼーションとデシリアライゼーションの両方に 1 つのメソッドだけを用意し、yaml-cpp でサポートされている通常の型のように >> と << を使用できるようにすることです。

0 投票する
2 に答える
1061 参照

parsing - yaml-cpp でのコメントの解析

より大きなプロジェクトの一部として、c++ (および Qt) でグラフィカルな yaml ファイル エディターを作成します。私は yaml-cpp ライブラリを使用していますが、すべて正常に動作します。コメントも解析できますか? コメントを書くことは問題ありませんが、コメントを読むための解決策が見つかりませんでした。

前もってありがとう、フィリップ

0 投票する
1 に答える
505 参照

yaml-cpp - VC++ 2010 を使用した YAML はリリースにコンパイルされますが、デバッグにはコンパイルされません

YAML を C++ で学習しようとしています。指定された yaml-cpp ファイルを、CMake を使用して VC++ Express 2010 で .dll および .lib ファイルにしました。SFML などの他のライブラリをセットアップするのと同じ方法でプロジェクトをセットアップしました。

私の問題は、yaml-cpp サイトにあるサンプル コードのリリース バージョンをビルドしようとすると、次のようになることです。

ただし、デバッグ バージョンをビルドしようとすると、次のようになります。

これを処理する方法がわかりません。ライブラリのデバッグ バージョンをビルドする必要がありますか? はいの場合、どのように?何かを変更できた場合、どのプロジェクトオプションがこれに影響するかわかりません。

コンパイルすると、次の警告が表示されます。

テンプレートのプリントアウトがたくさんある場合、 fe :

これは私の側の問題ですか?悪い CMake ファイルとコンパイル?

0 投票する
1 に答える
1046 参照

c++ - yaml-cppのYAMLモンスターの例を使用した「不正なブロックエントリ」

ここにある例を実行して、C++でYAMLを使用してみます。コードを逐語的に新しいプロジェクトフォルダーのtest.cppにコピーしました。YAMLを静的ライブラリにコンパイルし、プロジェクトにリンクしています。Ubuntu11.10を実行しています。次のコマンドを使用してコンパイルします。

次のエラーステートメントが表示されます。

この例外の意味は何ですか?そして、何が間違っている可能性がありますか?それぞれの例外が何を意味するのかについての明確なドキュメントを見つけることができなかったので、この情報へのリンクでさえ役立つでしょう。私はYAMLに不慣れで、ライブラリを使用していて、Linuxを使用しているので、おそらく深遠です。よろしくお願いします。

編集:エラーは「parser.GetNextDocument(doc)」の前に発生します。また、単一のスカラーを格納するWebサイトからより簡単な例を実行しましたが、これは正常に機能しました。入力ファイルまたはコードに関する例外はありますか?

0 投票する
1 に答える
1516 参照

c++ - yaml-cpp と連携するためのデータ構造の設計のヒントはありますか?

YAML と yaml-cpp ライブラリを使用してファイルを解釈し始めています。「モンスター」の例を、自分のプロジェクトからの情報で拡張しました。コードと yaml ファイルは以下のとおりですが、最初に質問があります。

プロジェクトから取得するすべてのデータを 1 つの巨大な構造に配置する必要がありますか? モンスターの例では、文書 doc[i] から値を読み取るのはモンスターのリストだったので簡単でした。私の例では、いくつかのリストだけでなく、スカラーなども使用します。これを行う唯一の方法は、技術的にエントリが 1 つだけのリストを作成することです (つまり、先頭に '-' が 1 つだけあります)。ファイルの、すべてがブロックにインデントされます)。答えは、オーバーロードされた >> 演算子の 'problemformulation' バージョンのコンテンツの一部を取得することだと思いますが、そのコンテンツをその関数内に配置しないと、適切に機能させることができませんでした。ヘルプやアドバイスをいただければ幸いです。

ea_test.cpp:

そして、ea.yaml:

あなたの助けとヒントを前もってありがとう!

編集: おそらく、実行する yaml ドキュメントは 1 つだけで、作成される problemformulation オブジェクトは 1 つだけです。私のコードは、リストに対して行うことを適応させますが、一度しか行いません。「1回だけ実行する」という適切な方法を知りたいのですが、それはよりクリーンで見栄えの良いYAMLファイルを作成すると思うからです(すべてのものを理由もなく1ブロックインデントする必要はありません)。

0 投票する
1 に答える
1225 参照

yaml-cpp - Visual Studioの下のyaml c ++ dll

Visual Studio 8 2005 で「yaml-cpp-0.3.0」を使用して dll を作成しようとすると、「INSTALL」、「run-tests」のリンク エラーが発生します。

エラー 1 エラー LNK2019: 未解決の外部シンボル "void __cdecl YAML::operator>>(class YAML::Node const &,class YAML::Binary &)" (??5YAML@@YAXABVNode@0@AAVBinary@0@@Z ) 関数で参照される "public: class YAML::Binary const __thiscall YAML::Node::to(void)const " (??$to@VBinary@YAML@@@Node@YAML@@QBE?BVBinary@1@XZ ) parsertests.obj

エラー 2 致命的なエラー LNK1120: 1 個の未解決の外部ファイル ....\yaml-cpp_dll\build\test\Debug\run-tests.exe 1

http://code.google.com/p/yaml-cpp/issues/detail?id=88でユーザーが言及した一般的な手順を使用して

  1. 「yaml-cpp-0.3.0」の cd yaml-cpp
  2. mkdir ビルド
  3. CDビルド
  4. cmake -DBUILD_SHARED_LIBS=ON -G "Visual Studio 8 2005" ..

これを修正する方法を探しています。どんな入力でも大歓迎です。