問題タブ [boost-signals]
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::signal slot_type
次の関数をビルドすると、ビルドエラーが発生します。
エラー:
テンプレート化されていることと関係があると思いますが、修正方法がわかりません。私は、次のように追加してみました
しかし、これは別のエラーを生成するだけです。
c++ - boost::signals::scoped_connection は std::vector では機能しません。なぜ?
私が理解しているように、scoped_connection
s は、範囲外になる前ではなく、範囲外になったときに自動的に切断されることを意図しています。scoped_connection が入っていると、これが正しく機能しないことがわかりましたstd::vector
(おそらく、他のコンテナーでも失敗します)。
例えば。
std::vector
これは、要素がコピー可能であるのに対し、コピー不可である必要があると主張することで説明されているのを見てきましたが、それscoped_connection
は完全に真実ではありません。std::vector
要素がmoveableであることのみが必要です。scoped_connection
(そして、私は移動可能であるべきだと思っています。)
たとえば、次のコードは機能します。
std::vector
さらに、コピーできないものをコピーしようとして問題が発生した場合、コンパイル エラーが発生するのではないでしょうか。
だから私は、scoped_connection
内部で正しく動作しない実際の理由は何だろうと思っていvector
ます.これはブースト内で修正できる問題ですか.
(ブーストバージョン 1.53.0 を使用して gcc バージョン 4.8.0 でこれをテストしました。)
c++ - boost::signal と boost::bind のカプセル化
今問題があります。boost::signal と boost::bind を自分の Event クラスにカプセル化しようとしています。
サブスクライブ関数の署名で関数ポインターを渡そうとしましたが、ビジュアル スタジオでエラーが発生するだけです。Subscribe の署名の書き方と、boost::bind に何を渡すかがわかりません。理想的にはboost::bind(&MyClass::MyHandler, &MyClassObject)
、Subscribe 関数に入れ、 のように外部で呼び出しMyEventObject.Subscribe(&MyClass::MyHandler, &MyClass)
ます。その2つの空白を埋めるのを手伝ってくれる人はいますか?
c++ - boost::signals::trackable から派生する頻度は?
boost::signals::trackable
Boost.Signals を使用する場合、オブジェクト/接続の有効期間の管理を容易にするために、boost から派生させることができます( boost のドキュメントを参照してください)。
私はプロジェクトの初期段階にあり、から派生するかどうかを考えていboost::signals::trackable
ます
- 将来 Boost.Signals を使用する可能性がある、私が作成するすべての新しいクラス
trackable
またはクラスでのみ、基本クラスの機能が必要になると確信しています
最初のアプローチの主な理由は、 からの導出を忘れないようにするためですboost::signals::trackable
。
また、次のような二重導出
不要になる。
一方で、メモリ リークを防止することは設計上の主要な側面であってはなりません。valgrind などのテストおよびプロファイリング ツールを使用して、メモリ リークを検出する必要があります。
成長するプロジェクトに適しているアプローチはどれですか?
c++ - C++ シグナル 2 スロット コールバックには、Objective-C/C++ クラス/セレクター (メソッド) 情報を含めることができますか?
これはあなたの何人かにとって非常に明白であるに違いありませんが、私はこの例を見つけることができません:
C++ クラス メンバー関数またはファンクターであるスロット コールバックを接続するには、boost::signals2 シグナルが必要です。これにより、モデル コールバックを Objective-C/C++ コントローラー コードに作成できます。
そのコールバックは、C++ コールバック関数内で呼び出すことができる Objective-C/C++ メソッドのインスタンスのクラスとセレクターを格納する必要があります。(Objective-C/C++ メソッドの直接コールバック関数アドレスを実際に提供する方法はないと仮定しています)。Objective-C/C++ メソッドを呼び出すための情報を保持するために、C++ クラス/ファンクターのインスタンスを作成する必要があると想定しました。
また、Class と SEL (セレクター) を分離して、void* として渡すことなく、コールバック用の C++ クラスのインスタンス内に格納できるかどうかもわかりません。C++ コールバックが signal() によって呼び出されると、class_getInstanceMethod と method_getImplementation を使用して、それらを使用可能な (呼び出し可能な) 形式に変換できると期待しています。
さらに、信号の性質に関する情報を提供できる任意の構造体 ("EventInfo") を持つ少なくとも 1 つのパラメーターを信号からスロットに送信したいと思うでしょう。
誰か闇に光を当ててくれませんか?
c++ - 「this」ポインタでboost::bindを使用するには?
以下のコードは、次のエラーを出力しています。
コードは次のとおりです。
質問は次のとおりです。「this」ポインターでバインド関数を使用する方法は?
ありがとうございました
boost-signals - 後で切断するためにブースト::シグナル::接続を保存する方法は?
コールバックに使用するクラスを実装したいと考えてboost::signal
います。AddHandler()
他のオブジェクトは、およびRemoveHandler()
メソッドを使用してコールバック関数を登録できます。
ある SO の回答では、boost::signal::connection
から返されたオブジェクトを追跡することが提案されていますconnect()
が、別の回答では追跡しないことが提案されています。接続を管理する方法がわかりません。
connection
のみを持っている場合、後で切断するものをどのように調べることができslot_type
ますか?
発信者が次のようなことができるようにしたい:
c++ - Boost.Signals の廃止
Boost.Signals は積極的に維持されなくなったため、非推奨になりました。新しい開発には Boost.Signals を使用しないでください (代わりに Boost.Signals2 を使用してください)。既存の Boost.Signals ベースのコードがある場合は、引き続き機能しますが、Boost.Signals2 への移行を検討してください。
http://www.boost.org/users/history/version_1_54_0.html
そのため、シグナルは非推奨です。私はこれについて混乱しています。私の知る限り、Signals2 は Signals のマルチスレッド バージョンです。しかし、Signal をマルチスレッドで使用する必要がない場合はどうすればよいでしょうか? オーバーヘッドが発生しますか?boost::signals2::trackable を使用できますか? シングルスレッド アプリケーションで Signals2 を使用すると、不利な点はありますか?