問題タブ [boost-phoenix]
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++ - Boost phoenix または lambda ライブラリの問題: std::vector から要素を削除する
最近、boost::lambda または boost::phoenix で解決できると思われる問題に遭遇しましたが、正しい構文を取得できなかったため、別の方法で解決しました。私がやりたかったのは、特定の長さよりも短く、別のコンテナーにない「文字列」内のすべての要素を削除することでした。
これは私の最初の試みです:
私がそれをやった方法はこれでした:
c++ - ブースト ラムダまたはフェニックスの問題: std::for_each を使用してコンテナーの各要素を操作する
古いコードをクリーンアップしているときに問題が発生しました。これは機能です:
私が興味を持っているのは、for ループをクリーンアップしてラムダ式にすることですが、正しい引数を get_connectivity_data に正確に渡す方法にすぐに行き詰まりました。get_connectivity_data は参照によって std::vector を受け取り、いくつかのデータで埋めます。出力には、各「チャンク」の std::vector が含まれます。
基本的に、これに対する私の結論は、コードをそのままにしておく方がはるかに簡単で、クリーンで、短いということでした。
編集:
したがって、私が想像していた私の質問に対する最も近い答えは次のとおりです。
それでも、そのコードはコンパイルされません。コンパイルできるようにコードにいくつかの変更を加えましたが、2 つの問題が発生しました。
- _ 1 はスマート ptr であり、std::distance は機能しませんでした。開始点として &chunks[0] を使用する必要があったと思います
- _ 1 はスマート ポインターであるため、次のことを行う必要がありました。
zip_ iterators に関する答えは、さらに詳しく読んで、この特定の用途に必要な余分なコードの量がかなりのものであることを発見するまで (これとあれをバインドするなど)、良さそうに見えました。
EDIT2:
ここと下に投稿した、余分な構文が少なく、明確な許容可能な解決策を見つけました。
c++ - Boost::bind と Boost Phoenix::bind の違いは何ですか?
Boost::bind と Boost Phoenix::bind の違いは何ですか?
c++ - boost phoenix::bind のコンパイルでエラーが発生しました
phoenix::bind を使用していますが、次のエラー メッセージが表示されます。
エラー C2039: 'bind' : 'phoenix' のメンバーではありません
私がバインドを使用していて、エラーが指しているコード行は次のとおりです。
phoenix::bind( &OptionalInputPort::eraseDataEditor ) ( phoenix::var( *optionalPort ) )
何が問題なのかわかりません。
フェニックスのインクルードは次の行です: #include boost/spirit/home/phoenix.hpp
ありがとう。
c++ - ブースト ファイルのコンパイル エラー
ブースト ライブラリを使用してコードをコンパイルすると、主に Spirit 名前空間を使用しているときに、多くのエラーが発生します。エラーは、次のようなブースト ファイルの構文エラーです。
boost/spirit/home/classic/dynamic/lazy.hpp(33): エラー C2143: 構文エラー: ';' がありません 「<」の前
また
boost/spirit/home/classic/dynamic/lazy.hpp(33): エラー C4430: 型指定子がありません - int が想定されます。注: C++ は default-int をサポートしていません
また
boost/spirit/home/classic/utility/grammar_def.hpp(104): エラー C2039: 'nil_t': 'boost::phoenix' のメンバーではありません
Visual Studio 6 から Visual Studio 2008 Express に移行し、最も古いバージョンのブーストから最新のバージョンに移行しています。
何が問題なのか知りたいです。問題がブーストライブラリにあるとは思えません。
c++ - C++ の関数データ構造
使い慣れた STL 構造に相当する機能 (別名、不変、または FP の意味で「永続的」) を提供する C++ データ構造ライブラリを知っている人はいますか?
「機能的」とは、オブジェクト自体が不変であることを意味しますが、これらのオブジェクトを変更すると、必要に応じて親オブジェクトと同じ内部構造を共有する新しいオブジェクトが返されます。
理想的には、そのようなライブラリは STL に似ていて、Boost.Phoenix とうまく動作します (注意 - 私は実際に Phoenix を使用したことはありませんが、私が知る限り、多くのアルゴリズムを提供しますが、遅延計算された変更がない限り、データ構造は提供しません。既存のデータ構造へのカウント - そうですか?)
c++ - ラムダ対フェニックスをブースト
私は最近、ラムダの代わりとしてブーストフェニックスを見始めました。フェニックスはラムダの完全な代替品ですか、それともフェニックスによって提供されていないラムダ機能がありますか?フェニックスは成熟していますか?知っておくべき落とし穴はありますか?
私の主な関心は演算子の構成であり、制御ステートメントとキャストはそれほどではありません
ありがとう
c++ - C++ boost::lambda::ret はフェニックスで同等
ret<T>
ブースト ラムダにより、テンプレートを使用して推定された戻り値の型を上書きできます。フェニックスで同等のものを検索しようとしましたが、見つかりませんでした。
フェニックスに相当するものはありますか?私は自分で交換品を作る方法を知っていますが、むしろしたくありません。ありがとうございました
c++ - boost::transform_iterator でフェニックス式を使用する方法は?
<更新>いつものように、質問は間違っていました。実際の問題は、なぜ transform_iterator が UnaryFunc::result_type に直接アクセスする代わりに、従来の result_of<> メタ関数を使用して戻り値の型を決定しないのかということです。回避策を含む回答を投稿しました。 </アップデート>
具体的には、フェニックス式result_type
で std::unary_function の概念に期待される型を公開する方法はありますか? boost::transform_iterator はこれを期待しているようで、その src を見ると、単純な回避策は見当たりません。
私が抱えていた問題を再現するコードは次のとおりです。
これをコンパイルしたときのエラー メッセージの関連部分は次のとおりです (gcc 4.3.4、boost 1.43):
boost::lambda (missing result_type
) にも同じ問題があります。過去に make_transform_iterator と lambda の同様の使用法を見たことがあると思っていましたが、今は想像しただけでしょうか。
提供されたラッパーまたはフェニックスまたはラムダに公開する他のメカニズムはありresult_type
ますか?
boost - カスタム属性解析によるブーストスピリットルール
テキストをこれらの構造体のベクトルに解析する Boost Spirit 文法を書いています。
この文法には次のような規則があります。
ただし、 の実際の文法pairSequence
は次のとおりです。
Pair
この文法でwitha
を double にb
等しく、なんらかの定数に等しくするようにしたいと考えています。私はこのようなことをしたい:
もちろん、上記はコンパイルされません。にコンストラクターを追加しようとしましたPair
が、まだコンパイル エラーが発生します ( 'Pair::Pair(const boost::phoenix::actor >&, double)' の呼び出しに一致する関数がありません)。