問題タブ [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.

0 投票する
1 に答える
469 参照

c++ - 述語としてのメンバー関数の比較

私はこのような構造を持っています。

この構造体のオブジェクトをベクターに格納します。

  1. someFun()メンバーが返すオブジェクトを見つける方法は42?

  2. であるオブジェクトを見つける方法_value42?

bindとの組み合わせを使用する必要があると思いequal_toますが、正しい構文を見つけることができません。

編集:

ありがとう。しかし、もう1つ疑問があります。

vector<A*>またはを持っていたらvector<boost::shared_ptr<A> >

0 投票する
0 に答える
439 参照

network-programming - boost::asio および boost::bind エラー

この質問は少し面倒です。次のコードをコンパイルできません。以下のコードをコンパイルする必要があります。

ブースト asio で問題が発生しています。接続を受け入れるロジックを均一な抽象化に抽象化して、Windows の名前付きパイプと Unix ドメイン ソケットの接続を通常の TCP/IP で均一に開始できるようにしようとしています。

以下のコードには 3 つのクラスがあり、最初の 2 つは TCP 接続を受け入れるための実装であり、下の 3 番目のクラスは最初の 2 つに関して実装されているジェネリック クラスですboost::bind。呼び出しに問題があります。問題はおそらく、セマンティクスに対する私の理解にあります。

通常のメンバー関数 (つまり、テンプレート メンバー関数ではない) を作成TcpDestinationAcceptor::handle_acceptすると、パラメーターを渡せなくなりAcceptHandlerます。コードは正常にコンパイルされます。注: からテンプレート関数のステータスを削除しませんTcpDestinationAcceptor::StartAccepting

注: すでに別のデザインを開始していますが、可能であればこのデザインを追求したいと考えています。

自己完結型コード:

0 投票する
1 に答える
1525 参照

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への参照を取得するため、何が問題になっているのかを確認するのに苦労しています。

0 投票する
3 に答える
877 参照

c++ - c++:boost::bind を使用してメンバー関数を期待される関数ポインター シグネチャに変換できますか?

関数ポインタをメソッド呼び出しに渡すサードパーティ ライブラリを使用しています。

通常の使用方法は次のようになります。

次に、continueAfterOPTIONS メソッドをクラスのメンバー関数にしたいと思います。通常、boost::bind を使用してこれを行います。

その結果

関数の引数にプレースホルダーを追加しようとしましたが、違いはありませんでした。私がやろうとしていることは可能ですか?おそらくバインド結果をキャストする方法はありますか?

ありがとう!

0 投票する
2 に答える
240 参照

c++ - C++: テキスト ファイルからパラメーター リストを解析した関数を呼び出す方法

プログラム内の関数を、スクリプトのようなテキスト ファイルから呼び出せるようにしたいと考えています。

特定の署名に強制的に準拠させることなく、この「スクリプトマネージャー」に任意の関数を登録できるようにしたいと考えています。したがって、スクリプトから MyFunc(bool, string) または MyFunc2(int, float, char) を呼び出すことができます。解析側では、これらのパラメーターをパラメーター リストに入れることができますが、問題はこれらのパラメーターを関数に渡す方法です。

特定の署名を強制するため、 MyFunc(paramlist[0], paramlist[1]) のように呼び出すことはできません。また、呼び出される関数が「スクリプト マネージャー」について知る必要がないため、パラメーター リストを処理できる必要はありません。

これらの 2 つのコンポーネント (呼び出される関数と「スクリプト マネージャー」) を、前者 (呼び出される関数) のラッパーを記述せずに切り離すにはどうすればよいでしょうか?

0 投票する
1 に答える
539 参照

c++ - テンプレート署名からboost::functionを作成する方法

最近、私はを隠す柔軟なオブザーバーパターンの実装を作成しようとしていましたboost::signal。私はほとんど成功しました。

テンプレートパラメータによって提供される署名に一致するメソッドを持たなければならないObserverクラスがあります。update

使用例:

オーバーロードされたメソッドobserverがない場合は、すべてが正常に機能します。updateその場合boost::bind、使用する正しい方法を推測することはできません。残念ながら、更新引数がわからないため、明示的なキャストを使用できません(この情報はにありFunctionSignatureます)。

次の方法で問題が発生します。

boost::functionそれがこの問題の解決に役立つと思います。テンプレートの署名のみを使用して、正しいメンバーメソッドでバインドする方法がわかりません。

それも可能ですか?

0 投票する
4 に答える
1825 参照

c++ - メッセージング システム: コールバックは何でもかまいません

ゲームのイベント システムを作成しようとしています。イベント マネージャーが格納するコールバックは、単純な関数とファンクターの両方にすることができます。また、関数/ファンクターを比較できるようにする必要があるため、イベントマネージャーから切断する必要があるものを知ることができます。

• 最初は boost::function; を使用してみました。operator== がないことを除いて、関数とファンクターを完全に適切に処理するため、必要に応じてコールバックを削除することはできません。

• boost::signal も使用してみましたが、operator== に関連するコンパイルの問題も発生します。

バイナリ '==' : 'const Functor' 型の左側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)

これを実装する方法について他に何か提案はありますか? または、boost:: 関数または boost::signal を機能させるにはどうすればよいでしょうか。(ただし、アイテムの小さなコレクションでは信号がかなり遅いと聞いたので、boost:: 関数を使用したいと思います。)


編集:これは、EventManager に持たせたいインターフェイスです。

0 投票する
2 に答える
1069 参照

c++ - Boost.Bindによって返されるオブジェクトを比較しますか?

出来ますか?bool b = (boost::bind(func, 1) == boost::bind(func, 1))「'boost:: _ bi ::bind_t'から'bool'に変換できない」ため、命令はコンパイルされません。(の署名はfuncですvoid func(int)。)

0 投票する
1 に答える
155 参照

c++ - テンプレートのオーバーロード(引数の数の違い)

以下に示すこれらの関数テンプレートを作成したかったのです。それらの目的はファンクターを比較することですが、boost.bindタイプのファンクターの特殊なケースをカバーする必要がありました。

問題は、私がそうするときcompare(boost::bind(func, 1), boost::bind(func, 1))、コンパイラが2番目のテンプレートを使おうとすることです。2つ目をコメントアウトすると、boost.bindタイプに特化したものが正しく使用され、すべてが正常に機能します。

使用する正しい関数テンプレートを選択するにはどうすればよいですか?

0 投票する
1 に答える
946 参照

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 *' に変換できません