問題タブ [boost-signals2]

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 に答える
386 参照

c++ - boost::signal2 enable_if を使用して純粋な関数またはメンバー関数にバインドする

私は現在、それ自体が(潜在的に異なるクラスの)メンバー関数であるか、クラスの一部ではない純粋な関数であるコールバックを設定できるクラスのメンバー関数を実装しようとしています。

このようなクラスを考えると、

非メンバー メソッドでは問題なく動作します。ただし、ユーザーがメンバー以外に接続できるようにするものの実装に失敗しています。これは私が試したものです:

次のような他のクラスのメンバー関数によって呼び出されます。

そして最後に

ここでの助けは大歓迎です!

PS: エラーで終了する VS 2015 を使用しています。

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

c++ - Boost Signals2: マウスのクリックやキーの押下などのイベントを登録するにはどうすればよいですか?

私は現在ゲームに取り組んでおり、C++ でイベントを処理するために signal2 ライブラリを使用することを計画しています。

ただし、「キーを押したとき」や「マウスをクリックしたとき」などのイベントや、ソケットでの着信接続などのイベントが必要なため、すべてがどのように適合するかわかりません。これらのイベントを登録するにはどうすればよいですか? このライブラリはこの種のものに使用されているようですが、これらのタイプのイベント処理を行う方法についてのヒントをオンラインで提供するものはないようです。

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

boost - 'boost::detail::variant::visitation_impl': 2 つのオーバーロードのいずれも、すべての引数の型を変換できませんでした

Boost ライブラリ 1.61.0 と Visual Studio 2015 Update 3 を使用して 2 つのプロジェクトをビルドできません。

これらのプロジェクトは、Visual Studio と Boost のバージョンのさまざまな組み合わせで何年も問題なくビルドされていましたが、Visual Studio と Boost のライブラリを更新する以外は、コードを何も変更していませんでした。

これらのプロジェクトの両方で発生するエラーは次のとおりです。

これらのプロジェクトの両方で、コードから直接 boost::variant を使用しません。あるケースでは、boost::variant が boost::signals2 から使用されているように見え (これもコードから直接使用していません)、別のケースでは、boost::variant が Cpp-Netlib から使用されているように見えます0.11.2。

これら 2 つのプロジェクトの出力ログの関連部分を次に示します。




これはブースト ライブラリのバグですか?

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

c++ - 例外の代わりのシグナル

ストアを開発しているとしましょう。セッションの状態に応じて、ユーザーはさまざまなことを行うことができます。たとえば、ある特定の瞬間にウィジェットをブロックする必要があるとします。これは、特定のユーザー アクションが原因で、ユーザーが再試行したためです。

もちろん、最も明白な実装は、アクションが現在ブロックされていることを示すために、対応する関数 (特定のイベント ハンドラー) で例外を起動することです。それは私の具体的な問題に似ています。その場合、例外をスローする代わりに、関数を「ノーオペレーション」にして、 のシグナルを発行する方が便利でしたboost::signal2。GUI は、彼がやりたいこと、ユーザーに通知することなど何でも行います。しかし、おそらく GUI はユーザーに 1 回だけ通知する必要があるため、最初の呼び出しの後でシグナルを切断するだけです。

そして、私はそれが好きでした。それは非常に美しくエレガントです: 操作を行わずにシグナルを発することです。スタックの巻き戻しはありません。関数は noexcept としてマークできます。その結果、より多くの最適化を有効にし、必要な場合にのみ例外的なケースに対処し、必要に応じてシグナルに接続および切断します。

ここで、各例外をシグナルに置き換えてメソッドを一般化したい場合はどうすればよいでしょうか? 非 GUI アプリケーションでも?

その場合、boost::signals2例外より非効率ですか?try/catch ブロック、no-noexcept 関数、およびスタックの巻き戻しがオーバーヘッドを引き起こし、コンパイラが可能な多くの最適化を回避するというのはよく耳にすることです。一方、boost::signals2はスレッドセーフであるため、余分なオーバーヘッドが発生します。

私の考えはまったく悪い考えですか?

結局のところ、設計(および最適化)の問題であるため、私の質問が「広すぎる」または「意見に基づく」ものではないことを願っています。あまり具体的ではありませんが、認めざるを得ません。

ノート:GUI は Web サイトです。問題は、ウィジェットとシグナルの階層を HTML/Javascript/Ajax に変換する C++ で Web サイトを作成するためのライブラリである Wt を使用していることです。私の長期的なプロジェクトは、両方で GUI を作成するためのスイートを作成することです。デスクトップ/モバイル (Qt) および Web (Javascript) を、独自の C++ バックエンドを備えた共通のインフラストラクチャから。wt は、同じイベントの C++/Javascript スロット間のマッピングを可能にします。たとえば、クリック: Javascript または Ajax が使用できない場合、イベントがサーバーに送信され、C++ スロットが呼び出されます。利用可能な場合、イベントは Javascript バージョンを使用してクライアントで実行されます。同じ (GUI) イベントに複数のスロットがある場合、スロットの実行順序は指定されず、両方のスロットが C++ 呼び出しである場合、スレッド プールに十分なスレッドがあれば、サーバー上で並列に実行することさえできます。 .

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

c++ - Boost::signals2 が複数のスロットをブロックしている

順序付けられたスロットに基づいてシグナル システムを実装したいとします。また、関数への接続をブロックすることもできます。より明確にするために:

Case Full Connection: mysignal("string","string") これは両方の関数に接続します。

ケース選択: mysignal("string","string") は func1_receiver にのみ送信します

ケースなし: mysignal("string","string") がブロックされました

だから私のコードは次のようなものです:

スロットをブロックしたい場合は、次のように記述します。

これはすべて正常に機能します。

2 番目のスロットもブロックしたい場合は、次のようにキャストする必要があります。

ここで、「'boost::signals2::shared_connection_block ブロック' の再宣言」というエラーが表示されます。

接続を自由にブロック/ブロック解除できると思っていましたが、何か誤解されています。

誰かが私を助けることができますか?