問題タブ [boost-function]
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::functionおよびboost::bindをメンバー変数に使用する
オブジェクトのメンバー変数の設定を可能にするboost::functionを作成しようとしています。私は、自分がやろうとしている(そして失敗している)ことを理解するために考えることができる最も簡単な例を作成しました。boost :: bindを理解しているように感じますが、boostは初めてで、boost::functionを誤って使用していると思います。
関数を使用してFoo::valueを10に設定したいという、28行目のエラーが発生しています。このすべてが間違っているのでしょうか。これらすべてにブーストを使用する代わりに、int *などを返す必要がありますか?'getFcn()'を呼び出す理由は、実際のプロジェクトでメッセージングシステムを使用しており、必要なデータを含むオブジェクトが存在しない場合、getFcnは空のboost::functionを返すためです。しかし、int *を使用すると、何も見つからなかった場合にNULLを返すことができると思います。
c++ - boost::function オブジェクトをコンテナに格納する
私はsのベクトルを持っていますKeyCallback
:
キーボード ボタンが押されたときのすべてのリスナーを格納するために使用します。それらを追加して、すべてのコールバックにイベントをディスパッチすることはできますが、ベクトルから特定の署名for_each
を実際に消去する方法がわかりません。KeyCallback
たとえば、次のようなものが必要です。
boost::function
ドキュメント(こちらを参照)によると、関数オブジェクトを比較するようなものはありません。これにより、上記の問題が説明されます。それで私は立ち往生していますか?これを回避する良い方法はありますか?
(コールバック メカニズムについて読んだことboost::signals
がありますが、どうやらかなり遅いようです。また、コールバックが 1 フレームに数回発生する可能性があると予想しています。)
c++ - boost:function定義を含むboost:signalsのマップ
エラーコードを関数にマップする単純なマネージャーを作成しようとしています。しかし、マップは値をコピーし、信号はコピーできないため、解決策ではありません。*演算子がboost::functionでブロックされているため、shared_ptrポインターのマップを使用できません。
これを保存するには、どのコレクションを使用する必要がありますか?
c++ - `boost::function` から C ポインタ (`var (*)(void*, var)` など) を取得するには?
重複の可能性:
boost::function を単純な関数ポインターに降格する
だから私はFlash C++ Compiler(別名flascc、alchemy)とhavinコードを次のように使用します:
次のコンパイラ エラーを取得します。
boost::function<var (void*, var)>
したがって、問題は、より多くの C スタイルから取得する方法です。var (*)(void*, var)
c++ - boost::function をテンプレートに渡す。ブースト::関数とはどのクラスですか
テンプレートに距離関数を渡す必要があります。したがって、boost::function と boost::bind を使用します。しかし、クラス Distanceに渡さなければならないものを理解していません:
テンプレートの作成者による例は次のようになります。
これが私のメインです:
最初に、(*const) が何を意味するのか、またはこれについてどこで読めるのか説明してもらえますか?
そして2番目:何を書くべきかを伝えるために、必要なものはすべて書いたと思います??? しかし、私はそれを取得しません。
私はすでに試しました:
と
しかし、これは素晴らしい試行錯誤でした:)
c++ - エキストラクトを使用してboost::python::objectからboost::functionをアンラップする
C++ から C++ モジュール関数を呼び出して、Python から関数を選択するにはどうすればよいですか? 以下の例を参照してください
文字列のマップを手動でセットアップし、実行したい関数を選択できることは知っていますが、よりクリーンな Python ソリューションが必要です。
また、基本的にboost::python::objectをアンラップし、そこからboost::function<>を抽出することで、非常に効率的にしたいと考えています。
ここにpythonファイルがあります
C++ モジュール コード (コンパイルしますが、実行されません。私の意図を確認できます):
実行できる場合は、タイミングも確認してください。
c++ - 生の関数ポインタと void* this と比較した std::function のパフォーマンス?
ライブラリ コード:
アプリケーション コード:
上記は、コールバック メカニズムの最小限の実装です。これはより冗長であり、std::function のようにバインディングやプレースホルダーなどをサポートしていません。std::function
上記のユースケースにorを使用するboost::function
と、パフォーマンス上の欠点はありますか? このコールバックは、リアルタイム アプリケーションの非常に重要なパスになります。boost::function は仮想関数を使用して実際のディスパッチを行うと聞きました。バインディング/プレースホルダーが含まれていない場合、最適化されますか?
アップデート
最新のコンパイラでアセンブリを検査することに関心がある場合: https://gcc.godbolt.org/z/-6mQvt
c++ - 「boost::function = boost :: bind(...)」が13の一時関数を作成するのはなぜですか?
かなり基本的なテストコードがあります。すべての操作をログに記録するだけのクラスがあります。boost::function
私はそれを次のようなオブジェクトにバインドしました:
関数オブジェクトにはのコピーが含まれていると思いますf
。したがって、少なくとも1つのコピーを作成する必要があります。しかし、私は13の一時的なものを取得していることがわかりました。出力は次のとおりです。
オブジェクトのコピーを作成するために使用できないref
か、必要なためです。cref
私はひどく間違ったことをしていますか?boost::shared_ptr
または、不条理な数のコピーを避けるために、ラッパー(のような)を使用する必要がありますか?
完全なコードと問題のデモンストレーションはCodepadにあります。
c++ - 引数をboost::functionにバインドする方法は?
boost :: bind docs(http://www.boost.org/doc/libs/1_53_0/libs/bind/bind.html#with_functions)から、 "bindが取る引数は、返された関数によって内部的にコピーおよび保持されますオブジェクト」ですが、これらの関数オブジェクトに引数をコピーする方法があればどうでしょうか。
すなわち:
前もって感謝します。
solr - Solr MoreLikeThis とブースト関数の使用 (最近のアイテムのブースト)
「MoreLikeThis Solr リクエスト ハンドラで最近のアイテムをブーストする」と同様の質問があります。MoreLikeThis Solr リクエスト ハンドラで最近のアイテムをブーストする
MoreLikeThis ハンドラーまたはコンポーネントから返された最近のアイテムをブーストしたいと考えています。bf は Dismax パラメータであるため、MoreLikeThisHandler ではサポートされていないことがわかりました。
したがって、(solrconfig.xml内で)次のことを試しました:
と