問題タブ [boost-spirit-karma]
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.
c++ - スピリットカルマ:コピー不可能なポインタにアクセスする
カルマ文法のポインターのベクトルにアクセスしようとしていますが、ほとんど成功していません。ポインタタイプはコピーできないため、それを使用するルールは参照を取得する必要があります。
これはコンパイルされますが、次を返します:テスト2ルール:1、テスト1ルール:25104656、テスト1ルール:25104720など。この単純なケースで私ができることを私は知っています
それを解決するために、しかし実際には値は文法に渡されるはずの別のコピー不可能なタイプであり、したがって私は例で行われたように構造体適応を使用する必要があります。
ここで説明したように、custimisation point deref_iteratorも知っていますが、私はテンプレートライブラリで作業しており、テンプレートに依存するタイプでderef_iteratorを特殊化することはできないと思います。
例を機能させる方法について何かアイデアはありますか?
c++ - Boost::spirit::karma: 反復またはクリーネ スター内で複製が機能しませんか?
boost::spirit::karma
これは、graphviz ドット言語で書式設定された出力を生成するために使用する非常に単純なコードです。
私はこれが生成することを期待します:
代わりに、次のものが生成されました。
つまり、duplicate[]
ディレクティブは kleene スター内ではまったく効果がありません。ディレクティブも試しましたrepeat[]
が、うまくいきません。
私は何を間違っていますか?ブースト バージョン 1.53.0 を使用しています。g++
4.7 とclang++
3.2 でコードをコンパイルしましたが、どちらも同じ結果になりました。
c++ - boost::spirit::karma でネストされたオブジェクトのデータにアクセスする方法は?
ItemList
オブジェクトのリストで、ジェネレーター内Item
のオブジェクトにアクセスするにはどうすればよいですか?Item
次のサンプル コードは、VC9 でコンパイルされます (boost のインクルード ディレクトリとリンク ディレクトリが適切に設定されています)。設定方法がわかりませんlist_generator::item
。
出力は次のとおりです。
c++ - Boost:Spirit:Karma: 出力の現在位置を取得するには?
フォーマットされた出力を生成したい。このためには、いくつかのインデントが必要です。したがって、生成中のある時点で、現在の位置を取得して、次の行をその量でインデントしたいと考えています。
これは最小限の例です。karma::lit("Some text: ")
コンパイル時の出力の長さがわからないことを想定してください。実際、この先頭テキストはいくつかの規則によって生成される場合があります。
これにより、
結果が欲しい:
これを実現するには、ベクトルが生成される直前に現在の位置を知る必要があります。qi::raw[]
では、 ?に相当するようなもの。
更新:この時点までに生成された出力へのポインタも必要です。
boost - boost::spirit::karma ジェネレーター ルール内のセマンティック アクション
これは何時間も私を悩ませてきましたが、それを機能させる方法がわかりません。ルールが使用されるたびに何かをしたいだけです。この例では、カウンターをインクリメントします。ルールを明示的に指定せず、boost::spirit::karma::generate の呼び出しで使用すると、機能します。しかし、すべてをルールに入れようとすると、コンパイルされず、長いエラー メッセージから何の洞察も得られません。
(上で最もエレガントなboost::spiritバージョンを見ることができますが、ラムダ関数またはメンバー関数を使用するとすべて同じ結果になります。「ダイレクトメソッド」は機能しますが、「ルールメソッド」は機能しません。)
残念ながら、これをカバーするドキュメント、例、またはその他のリソースも見つかりません。参考文献にも非常に感謝しています。
c++ - バリアントへの入力に使用すると、定数文字列がブール値になるのはなぜですか?
私の問題を以下の (おそらく最小ではない) サンプル アプリケーションに要約しました。サンプルは汎用の JSON パーサーです。ただし、2 つの問題があります。1. 他のオプションがどれもパスしない場合、bool_ がバリアント リストのアウトプッターである場合、常に true または false を出力します。それが最後のものでない場合、それ以降は事実上使用されません。理由がわかりません。2. 入力が文字列の場合、バリアントから文字列ハンドラが起動されることはありません。バリアントの外で使用すると、発火します。
サンプル コードでは、単純化された文字列出力が karma::string になっていますが、それでもエラーが発生します。ここで学んだことを実際のアプリケーションに戻すと、文字列出力は C スタイルのエスケープ文字列になるため、karma::string でのみ機能するものは役に立ちません。
Output of a boost::variant type using boost::spirit::karmaおよびboost::spirit::karma 引用符で囲まれた文字列の出力 を既に読んだ(そして読み直した)が、どちらも私のケースに適切に適用できない(つまり、結局のところ答えがわかりません) または、より複雑な例では機能しません。また、mini_xml のサンプル コードにも精通しています。
私が間違っていることについて何か提案はありますか? そして、なぜ私がやっていることは間違っていて、修正は正しいのですか?
すべてのヘルプは本当に感謝しています。
表示される実際の問題をカバーするようにタイトルを変更するように編集しました。コード サンプルのアップロード ミスを修正するために編集しました。