問題タブ [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++ - boost::bindおよびboost::functionを使用したコールバックとしてのクラスメンバー関数
使用しているCライブラリのコールバックとしてメンバー関数を設定しています。Cライブラリは次のようなコールバックを設定します。
boost :: bind(可能な場合)を使用して関数ポインターを渡したいと思います。ポイントされている関数は、静的メンバーではなく、インスタンス化されたクラスのメンバーであることが望ましいです。例えば
これは、boost::bindとboost::functionを使用して実行できますか?クラスメンバー関数をコールバックとして渡すにはどうすればよいですか?(3番目の答え)私は次のことを宣言できるようです(どこか、またはtypedefとして):
そして、A(ctor)のどこかでそのタイプのboost :: bindを呼び出し、それをCライブラリ呼び出しに渡します。
これは可能ですか、それとも私はオフベースですか?どうもありがとう。
c++ - boost::null 関数ポインターを使用したバインド
boost::bind
戻りオブジェクトに埋め込まれた関数ポインタがNULL
/ nullptr
/0
の場合、それを呼び出す以外のアクションを実行する必要があります。オブジェクトにヌル関数ポインタが含まれているかどうかを判断するにはどうすればよいですか?
補遺
- 戻りオブジェクトがテンプレート関数のさまざまな呼び出しシグネチャで使用される
boost::function
ため、 s を使用して比較できるとは思いません。boost::bind
- 簡単な例:
解決
呼び出し先の関数のアリティは変わらないので、バインドの戻りオブジェクトを に「キャスト」してboost::function
呼び出すことができます.empty()
c++ - boost::bindを介してベクトルから文字列を削除する
ベクトルから短い文字列を削除しようとしています。
コンパイラは非常に大きなエラーメッセージを吐き出します。
次の解決策が機能します。
しかし、私はまだ最初のバージョンで何を間違えたかについて興味があります。ありがとう!
c++ - boost::bind で同じ名前の const メソッドと非 const メソッドを区別する
const と non-const の両方で宣言されているメソッド名を使用するboost::bind
と、あいまいなエラーが発生します。たとえば、
どうすればこの問題を解決できますか?
c++ - メンバー変数へのバインド
ブースト バインドからの次の例は、私には機能しません。
error: assignment of read-only location 'boost::bind [with A1 = boost::arg<1>, M = int, T = A](&A::data, (<unnamed>::_1, boost::arg<1>())).boost::_bi::bind_t<R, F, L>::operator() [with A1 = A, R = const int&, F = boost::_mfi::dm<int, A>, L = boost::_bi::list1<boost::arg<1> >](((A&)(& a)))'
私は何か間違ったことをしていますか?コンパイラは g++ 4.4.0 です
c++ - メンバー関数でブーストバインドを使用する方法
次のコードにより、cl.exeがクラッシュします(MSVS2005)。
ブーストバインドを使用して、myclassのメソッドを呼び出す関数を作成しようとしています。
私は何が間違っているのですか?
c++ - boost :: bindのテンプレート関数のオーバーロードを強制する方法は?
(boost / Algorithm / stringライブラリから)と一緒にstd::find_if
使用して述語を作成しようとしています。次のスニペットは、私がこれを達成しようとしている2つの方法を示しています。boost::bind
boost::contains
このコードをg++3.4.5でコンパイルすると、次の出力が得られます。
boost::icontains
オーバーロードが1つしかないものに切り替えると、すべてが正常に機能します。非テンプレート関数のオーバーロードが複数ある場合に、同様の状況を解決する方法を知っています。誰かが私がこれを正しく書くのを手伝ってもらえますか?または、独自の比較関数を作成する必要がありますか?
c++ - コールバック登録の読みやすさを改善するマクロ
C++ でのコールバックの特定の使用法を簡単にするマクロを作成しようとしています。私のすべてのコールバックはメンバー関数でありthis
、最初の引数と 2 番目の引数として取り、その型は共通の基本クラスから継承されます。
通常の方法は次のとおりです。
私は書きたいです:
常に同じクラス内で使用されることに注意してください。
typeof
悪い習慣と見なされているとしても__class__
、現在のクラス名を取得するためのマクロの欠如に対するかなりの解決策のように思えます。
次のコードが機能します。
への引数として与えられるマクロでこのコードを使用することはできませんregister_callback
。
私はもう試した:
理解できない理由で機能しません。GCC ドキュメントの引用:
-construct
typeof
は、typedef 名を使用できる場所ならどこでも使用できます。
私のコンパイラは GCC 4.4 です。標準的なものを好む場合でも、GCC 固有のソリューションは受け入れられます。
c++ - C++でジェネリックコールバックを実装する方法
この基本的な質問をすることについての私の無知を許してください、しかし私はこの種のことは些細なことであるPythonを使うことにとても慣れてきたので、C++でこれをどのように試みるかを完全に忘れました。
バックグラウンドで低速のプロセスを実行する関数にコールバックを渡して、後でプロセスが完了したときにコールバックを呼び出せるようにしたい。このコールバックは、フリー関数、静的関数、またはメンバー関数である可能性があります。また、コンテキストのためにそこに任意の引数を挿入できるようにしたいと思います。(つまり、ある意味で非常に貧しい人のコルーチンを実装します。)その上、この関数は常にプロセスの出力であるstd::stringを取ります。最終的なコールバックパラメータリストでのこの引数の位置が固定されていてもかまいません。
答えにはboost::bindとboost::functionが含まれているように感じますが、任意の呼び出し可能オブジェクトを作成するために必要な正確な呼び出しを実行できません(1つの文字列を取得するようにカリー化しています)。それらをバックグラウンドプロセスに保存し、stringパラメーターを使用してcallableを正しく呼び出します。