問題タブ [boost-bind]
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++ - トークンパーサーのセマンティックアクション
私はspiritlexの例4に示されているコードに基づいて動作するトークンパーサーを作成しました
私のルールの1つは次のようになります
これはうまく機能します。提示されたとき
期待通りに出力します
名前ステートメントを次のように設定します:xyz
今、私は何か便利なことをしたいので、見つけた名前をクラスに保存します。パーサーのセマンティックの例から作業して、このコードを記述します
これはコンパイルされません
コンパイラがboolからstringに変換しようとしていることに不満を言うのはなぜですか?私が見ることができるブールはありません。
c++ - 関数を範囲に対してバインドして、反復関数を作成します
bind_range
範囲に対してバインドできる独自の実装を試みています。次のようなクライアントコードを許可する必要があります。
上記のコードで、私のテンプレートは、に準拠し、その値型がの最初のパラメーターと互換性があることbind_range
を検出します。次に、各値を呼び出して反復する関数オブジェクトを生成します。v1
ForwardRangeConcept<>
f()
v1
f()
上記は、呼び出し元のコードのfor-each構文の形式で実現できることは知っていますが、バインドされた関数を取得して後で使用したいと思います。
以上が私が達成したいことの本質です。C ++テンプレートメタプログラミングのコピーを読み、実装boost::bind
を確認しましたが、解決策を開始できません。私はまた、このようなものがすでにBoostライブラリのどこかに存在しているというしつこい感じがします。
拡張機能:
複数の範囲をバインドします。 例えば:
返品タイプの取り扱い。 繰り返し呼び出しからの戻りタイプは必要ありませんが、誰かが各戻り値を格納または処理したいと思うかもしれません。これは、ある種のラムダタイプの構造でうまく実行できると確信しています。
c++ - 後で再生するために完全な汎用関数呼び出しを保存しますか?
現時点では、以下に示す関数MyClass::Enableを介して関数呼び出しを保存しています。これは、関数の引数を指定する必要がなく、 commanListをループ処理することで後でコンシューマ スレッドで関数を再生できるという意味で一般的です。
ただし、迅速なパフォーマンス チェックにより、このメソッドは、関数ルックアップ テーブル (ジェネリック部分を壊す) を使用して関数引数と関数ルックアップ位置を格納する場合と比較して、格納された関数を完了するのに 2 倍の処理時間がかかります。(これが意味をなさない場合はお詫びします:本質的には関数レコーダーです)。
std::tr1::bind [boost::bind] のよりパフォーマンスに適したバージョンはありますか、または関数呼び出しを一般的な方法で記録し、後で再生するより良い方法はありますか?
c++ - boost::bind への生ポインタ引数を削除する
A*
に引数として渡したいヒープが割り当てられているとしましょうboost::bind
。
boost::bind
のコンテナーのような STL で後で処理するために保存されboost::functions
ます。
A*
STLコンテナの破棄時に確実に破棄されるようにしたい。
説明するには:
どうすればそれができますか?
編集
多分私が望んでいることはそれほど現実的ではありません。
私は生のポインタと生のポインタを受け取る関数を持っています。呼び出しはboost::bindによって遅延されます。この時点で、boost::bind を実行したい場合に備えて、自動メモリ管理が必要です。私は怠け者なので、「準備完了」のスマート ポインター ソリューションを使用したいと考えています。
std::auto_ptrは良い候補のように見えますが...
コンパイルされません (こちらを参照)
pAutoA が破棄され、基になる pA が削除されます。
編集 02
上記のコンテナーでは、さまざまな引数を使用してさまざまな「コールバック」を保存する必要があります。それらのいくつかは、オブジェクトへの生のポインターです。コードが古いので、いつでも変更できるとは限りません。
コールバックをコンテナーに格納するための独自のラッパーを作成することは最後の手段です (おそらく唯一の手段ですが)。
c++ - boost::shared_ptr でオブジェクトを特定する
ブースト Web サイトの例に基づいてアプリケーションを構築しています。これらは、知っておくべき関連する定義です。
connection はクラスです。
ファイルの 1 つであるconnection_manager.cppでは、次のようにしています。
ここで、プログラム構造のために、すべての新しい接続を別のスレッドで開始したいと考えています。したがって、次のように上記を変更しました。
私の問題、つまりこの質問は、これらの connection_ オブジェクトを 1 つだけにしたい場合です。以前に提供されたリンクでは、彼らは次のようにしています:
しかし、上記のコメントが示唆するように、すべてのスレッドの中から c を見つけて、そのスレッドだけを停止するにはどうすればよいでしょうか。そのスレッドの join() 関数を呼び出したい。
アップデート:
これこそが、私が本当に手に入れたいものだと思います!だから私は自分の変数を次のように宣言します
では、以前と同じ方法で新しいトレッドを作成するにはどうすればよいでしょうか。お気に入り:
しかし、次のステップは何ですか?混乱させてすみません... :-)
c++ - std::foreach with boost::bind
これの何が問題なのですか:
正常にコンパイルされますが、動作しません。
c++ - boost::bind() はパラメータを参照または値でコピーしますか?
valgrind の DRD ツールが「サイズ 4 でのスレッドによる負荷の競合」と不平を言うのはなぜですか: そのようなコードについて:
boost::bind() は参照または値によって値を保存しますか?
c++ - boost::bind の戻り値の型は何ですか?
関数の「バインダー」を変数に保存し、演算子のオーバーロード機能を利用して、次のコードで繰り返し使用したいと考えています。実際に私が望むことを行うコードは次のとおりです。
もちろん、気になるのは次の行です。
意図的に型エラーを作成し、エラー メッセージを分析するだけで型を取得できました。それは確かに良い方法ではありません。「bindGetN」の型を取得する方法はありますか? または、同様の機能を生成する別の方法があるのでしょうか?
編集:言うのを忘れていましたがfunction
、この場合、使用する「標準」の提案は機能しません。これは、オペレーターをオーバーロードさせたいためです。
c++ - 関数の`new`演算子/コンストラクターへの関数ポインターを作成することは可能ですか?
オブジェクトの作成をパラメーター化する場合は、もちろん、特定のクラスでnewを呼び出し、ポインターを渡す関数を作成できます。そのステップをスキップして、関数ポインターをnew
オペレーター自体に渡すことが可能かどうか疑問に思っています。
c++ - std::bind1st が「ほとんど使用できない」と見なされるのはなぜですか?
での会話中に、は C++03 に存在するが、「ほとんど使用できない」boost::bind
ことが指摘されました。std::bind1st
これを裏付ける確かなものが見つかりません。
boost::bind
ドキュメントには次のように記載されています。
boost::bindは、標準関数std::bind1stおよび std::bind2ndの一般化です。任意の関数オブジェクト、関数、関数ポインター、およびメンバー関数ポインターをサポートし、任意の引数を特定の値にバインドしたり、入力引数を任意の位置にルーティングしたりできます。bindは、関数オブジェクトに要件を課しません。特に、 result_type、first_argument_type、 second_argument_type標準の typedefは必要ありません 。
おそらく、これらの制限が に適用されることを示唆していますstd::bind1st
。
引数の数に関する明らかな制限以外に、to /の利点は何ですか? C++03で「ほとんど使えない」という主張に何かメリットはあるのでしょうか?boost::bind
std::bind1st
std::bind2nd
std::bind1st