boost::signals2 でスロットが呼び出された特定の瞬間をオーバーライドし、いくつかのアクション (ロギング、デバッグ、例外処理) を実行する方法はありますか?
シグナル/スロットは、コード内の実行パスがさまざまなソフトウェアコンポーネント間で交差する場所であり、各コンポーネントはオプションであることが意図されているため、動作がおかしい場合は実行時に無効にできるため、スロット呼び出しの瞬間に例外をキャッチしたいと思います。そのため、スロット呼び出しがスローされたとき (外部ライブラリから来る可能性があり、単に std::bad_alloc である可能性があります)、それについて通知され、どのコンポーネントにシグナルが送られたかを知りたいので、そのコンポーネントを強制終了できます。
そこのスロットまたは接続オブジェクトにアクセスできないため、コンバイナーでそれを行う方法がわかりませんか? そのため、情報を取得する方法がわかりません。(すべてのスロットで戻り値の型を変更することは不可能です。)
私が見逃したこれを行うための非常に簡単な方法はありますか?
そうでない場合、どうすればいいですか?
slot_call_iterator (try/catch で呼び出しをラップするため) や connection_body_base (たとえば、それが属するコンポーネントに関する情報を格納するため) などをサブクラス化し、boost でこれらを使用しますか? (どのように?)
または、signals2::slot<...> をサブクラス化し、コンストラクターで所有コンポーネントに関する情報を提供し、何らかの方法で operator()(...) をオーバーロードしますか? (それについてもわかりませんが、すべてのテンプレートマジックでは難しいようです。)