問題タブ [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++ - 述語としてのメンバー関数の比較
私はこのような構造を持っています。
この構造体のオブジェクトをベクターに格納します。
someFun()
メンバーが返すオブジェクトを見つける方法は42
?であるオブジェクトを見つける方法
_value
は42
?
bind
との組み合わせを使用する必要があると思いequal_to
ますが、正しい構文を見つけることができません。
編集:
ありがとう。しかし、もう1つ疑問があります。
vector<A*>
またはを持っていたらvector<boost::shared_ptr<A> >
?
network-programming - boost::asio および boost::bind エラー
この質問は少し面倒です。次のコードをコンパイルできません。以下のコードをコンパイルする必要があります。
ブースト asio で問題が発生しています。接続を受け入れるロジックを均一な抽象化に抽象化して、Windows の名前付きパイプと Unix ドメイン ソケットの接続を通常の TCP/IP で均一に開始できるようにしようとしています。
以下のコードには 3 つのクラスがあり、最初の 2 つは TCP 接続を受け入れるための実装であり、下の 3 番目のクラスは最初の 2 つに関して実装されているジェネリック クラスですboost::bind
。呼び出しに問題があります。問題はおそらく、セマンティクスに対する私の理解にあります。
通常のメンバー関数 (つまり、テンプレート メンバー関数ではない) を作成TcpDestinationAcceptor::handle_accept
すると、パラメーターを渡せなくなりAcceptHandler
ます。コードは正常にコンパイルされます。注: からテンプレート関数のステータスを削除しませんTcpDestinationAcceptor::StartAccepting
。
注: すでに別のデザインを開始していますが、可能であればこのデザインを追求したいと考えています。
自己完結型コード:
c++ - boost::bindをstd::tr1::bindに置き換える際の問題
Visual Studio2008SP1で正常にコンパイルおよび実行される次のコードがあります。
main()でboost::bindをstd::tr1 :: bindに変更すると、エラーが発生します。
エラーC2248::
'boost::noncopyable_::noncopyable::noncopyable'
クラスで宣言されたプライベートメンバーにアクセスできません'boost::noncopyable_::noncopyable'
。この診断は、コンパイラによって生成された関数で発生しました
'NoncopyableObject::NoncopyableObject(const NoncopyableObject &)'
したがって、NoncopyableObjectのコピーコンストラクターを生成しようとしています。なぜこれがそうなるのか誰もが知っていますか?MenuItemDispatcherの呼び出し演算子はNoncopyableObjectへの参照を取得するため、何が問題になっているのかを確認するのに苦労しています。
c++ - c++:boost::bind を使用してメンバー関数を期待される関数ポインター シグネチャに変換できますか?
関数ポインタをメソッド呼び出しに渡すサードパーティ ライブラリを使用しています。
通常の使用方法は次のようになります。
次に、continueAfterOPTIONS メソッドをクラスのメンバー関数にしたいと思います。通常、boost::bind を使用してこれを行います。
その結果
関数の引数にプレースホルダーを追加しようとしましたが、違いはありませんでした。私がやろうとしていることは可能ですか?おそらくバインド結果をキャストする方法はありますか?
ありがとう!
c++ - C++: テキスト ファイルからパラメーター リストを解析した関数を呼び出す方法
プログラム内の関数を、スクリプトのようなテキスト ファイルから呼び出せるようにしたいと考えています。
特定の署名に強制的に準拠させることなく、この「スクリプトマネージャー」に任意の関数を登録できるようにしたいと考えています。したがって、スクリプトから MyFunc(bool, string) または MyFunc2(int, float, char) を呼び出すことができます。解析側では、これらのパラメーターをパラメーター リストに入れることができますが、問題はこれらのパラメーターを関数に渡す方法です。
特定の署名を強制するため、 MyFunc(paramlist[0], paramlist[1]) のように呼び出すことはできません。また、呼び出される関数が「スクリプト マネージャー」について知る必要がないため、パラメーター リストを処理できる必要はありません。
これらの 2 つのコンポーネント (呼び出される関数と「スクリプト マネージャー」) を、前者 (呼び出される関数) のラッパーを記述せずに切り離すにはどうすればよいでしょうか?
c++ - テンプレート署名からboost::functionを作成する方法
最近、私はを隠す柔軟なオブザーバーパターンの実装を作成しようとしていましたboost::signal
。私はほとんど成功しました。
テンプレートパラメータによって提供される署名に一致するメソッドを持たなければならないObserver
クラスがあります。update
使用例:
オーバーロードされたメソッドobserver
がない場合は、すべてが正常に機能します。update
その場合boost::bind
、使用する正しい方法を推測することはできません。残念ながら、更新引数がわからないため、明示的なキャストを使用できません(この情報はにありFunctionSignature
ます)。
次の方法で問題が発生します。
boost::function
それがこの問題の解決に役立つと思います。テンプレートの署名のみを使用して、正しいメンバーメソッドでバインドする方法がわかりません。
それも可能ですか?
c++ - メッセージング システム: コールバックは何でもかまいません
ゲームのイベント システムを作成しようとしています。イベント マネージャーが格納するコールバックは、単純な関数とファンクターの両方にすることができます。また、関数/ファンクターを比較できるようにする必要があるため、イベントマネージャーから切断する必要があるものを知ることができます。
• 最初は boost::function; を使用してみました。operator== がないことを除いて、関数とファンクターを完全に適切に処理するため、必要に応じてコールバックを削除することはできません。
• boost::signal も使用してみましたが、operator== に関連するコンパイルの問題も発生します。
バイナリ '==' : 'const Functor' 型の左側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)
これを実装する方法について他に何か提案はありますか? または、boost:: 関数または boost::signal を機能させるにはどうすればよいでしょうか。(ただし、アイテムの小さなコレクションでは信号がかなり遅いと聞いたので、boost:: 関数を使用したいと思います。)
編集:これは、EventManager に持たせたいインターフェイスです。
c++ - Boost.Bindによって返されるオブジェクトを比較しますか?
出来ますか?bool b = (boost::bind(func, 1) == boost::bind(func, 1))
「'boost:: _ bi ::bind_t'から'bool'に変換できない」ため、命令はコンパイルされません。(の署名はfunc
ですvoid func(int)
。)
c++ - テンプレートのオーバーロード(引数の数の違い)
以下に示すこれらの関数テンプレートを作成したかったのです。それらの目的はファンクターを比較することですが、boost.bindタイプのファンクターの特殊なケースをカバーする必要がありました。
問題は、私がそうするときcompare(boost::bind(func, 1), boost::bind(func, 1))
、コンパイラが2番目のテンプレートを使おうとすることです。2つ目をコメントアウトすると、boost.bindタイプに特化したものが正しく使用され、すべてが正常に機能します。
使用する正しい関数テンプレートを選択するにはどうすればよいですか?
c++ - 関数と Python を使用した Boost.Bind
コンパイル時にエラーが発生しますが、その理由がわかりません。次のコードはコンパイルを拒否し、次のエラーが発生します。
エラー C2664: 'void (PyObject *,const char *,boost::type *)': パラメーター 1 を 'const char *' から 'PyObject *' に変換できません
エラー C2664: 'void (PyObject *,const char *,boost ::type *)': パラメーター 3 を 'boost::shared_ptr' から 'boost::type *' に変換できません