問題タブ [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++ - Qtシグナルは値を返すことができますか?
Boost.Signalsは、スロットの戻り値を使用してシグナルの戻り値を形成するさまざまな戦略を可能にします。たとえば、それらを追加したり、それらから を形成しvector
たり、最後のものを返したりします。
一般的な知恵 (Qt のドキュメント[編集:この質問への回答と同様に]で表現されている) は、Qt シグナルではそのようなことは不可能だということです。
ただし、次のクラス定義でモックを実行すると:
moc は、void 以外の戻り値の型を持つシグナルについて文句を言わないだけでなく、戻り値を渡すことができるように積極的に実装しているようです。
したがって、ドキュメントによると、これは不可能です。では、moc はここで何をしているのでしょうか。
スロットは戻り値を持つことができるので、戻り値を持つスロットを戻り値を持つシグナルに接続できますか? 結局、それは可能でしょうか?もしそうなら、それは役に立ちますか?
編集:回避策を求めているわけではないので、提供しないでください。
編集:Qt::QueuedConnection
モードでは明らかに役に立ちません(ただし、 QPrintPreviewWidget APIでもありませんが、それでも存在し、有用です)。Qt::DirectConnection
しかし、 and Qt::BlockingQueuedConnection
(またはQt::AutoConnection
に解決される場合は) はどうでしょうかQt::DirectConnection
。
c++ - boost::signalを使用した場合の「一致する呼び出しがありません」コンパイラエラー
ファイルA.hppには、
したがって、ファイルA.cppには、
ファイルB.hppには、次のように接続したいEntities
静的メンバー関数を持つクラスがあります:(簡潔にするために名前空間は省略されています)receiveSignalCreateBullet
signal_createBullet
そして最後にファイルC.cppで、私は次signal_createBullet
のように使用します。
AとBは(g ++を使用して)正常にコンパイルされますが、Cは次のエラーメッセージで失敗します。
これを理解しようとしている間、私は自分の通話とエラーメッセージの最初の候補をフォーマットして、それらをより簡単に比較できるようにしました。
候補者が「Portable」構文を使用しているという事実に加えて(そして、いいえ、Portableスタイルを使用するようにコードを切り替えても違いはありません)私の呼び出しの最後のものがint&
候補者が持っている場所であることを除いて、2つの呼び出しの間に違いはありませんint
。_ int
信号からパラメータを削除して、それが問題であるかどうかを確認しようとしましたが、問題はありませんでした。
なぜ私がこのエラーを受け取るのか誰かがわかりますか?
c++ - boost.signals2ライブラリを構築する必要がありますか?
私のシステムはブーストライブラリの構築に問題があります。ほとんどのBoostライブラリは(幸いなことに)ビルドする必要のない単なるヘッダーであることを理解しています(一部の例外を除く)。ブースト::signals2ライブラリを構築する必要がありますか?また、boost.signals2ライブラリはboost.signalsライブラリに依存していますか?
eclipse-cdt - ubuntu11.04でgcc4.5を使用してboost::signalチュートリアルをコンパイルできません
ただし、Eclipse CDTは、使用する構文に関係なく解析エラーを表示します
私は持っています
推奨される構文
シグナルでの無効なテンプレート引数
メソッド「接続」を解決できませんでした
ポータブル構文
メソッド「接続」を解決できませんでした
シンボル「signal2」を解決できませんでした
Eclipse3.7を使用しています
c++ - C++ メンバ関数ポインタ、boost::signals
次の状況があります(コードの方が優れています)
問題は、「メンバー関数」ポインターを Register メソッドに渡す方法です。また、これは大丈夫ですか?私が欲しい/必要としているのは、ある種の代理人登録システムです。誰かが私を正しい方向に向けることができれば、感謝します。事前にサンクス。
c++ - ブースト信号接続管理
私はこの 2 晩、これを理解しようと頭を悩ませてきましたが、肯定的な結果は得られませんでした。ブースト信号には、たとえば、あるクラスのメンバー関数を別のクラス信号に接続するたびに、後で切断したい場合は、結果の接続を変数に保存する必要があります。後で、同じメンバー関数を他のクラス シグナルに接続したい場合 (メンバー関数は以前のクラス シグナルにまだ接続されています)、この新しい接続も管理するために保存する必要があります。私の質問は、これを回避する方法はありますか?
c++ - エラー: 関数が関数を返す
同様の質問が少なくとも1 つありますが、まだ解決されておらず、より複雑に思われるため、私はまだ質問しています。私は自分のものを単純化しようとしています。
以下のように .h を使用する .cpp ファイルがあり、これらの小屋をコンパイルすると次のようなエラーが発生します。どんなアイデアでも大歓迎です。問題のある部分のみを最小限に抑えるために、コードは簡略化されていることに注意してください。
FC_boost_prove.h:
FC_boost_prove.cpp:
コンパイル エラー:
環境: Ubuntu 10.10、g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
c++ - コンパイル エラー: クラス テンプレートがない、初期化子が多すぎる、一致する関数がない
boost::signals を使用してコンパイル エラーを削除できませんでした。任意のアイデアをいただければ幸いです。
私は現在の環境に合わせて 2 年前に書かれたプログラムを移植してきたので、boost::signals にはまだ慣れていません。以下のコードは、質問の目的で単純化するために元のプログラムを変更したものです。
私の質問に対する直接的な解決策が欲しいです。しかし、それ以外にも、boost:: シグナルに関する多くの質問があるため (ただし、どれが私のケースに最も適しているかを判断することをあきらめました)、回答で提案されているものに投票しますこれをより適切なアーカイブされた質問にするために、この質問のより適切なタイトルをエリアに追加してください。
boostProve_Doc.h
boostProve_View.cpp:
エラー:
環境: Ubuntu 10.10、g++ (Ubuntu/Linaro 4.4.4-14ubuntu5) 4.4.5
2011 年9 月 30 日更新) 提案のおかげで、次のようにして問題を解決しました。
c++ - シグナルとシグナル2
自家製のソリューションではなく、boost の信号ライブラリの 1 つを使用することでメリットが得られるアプリケーションがあります。
アプリケーションはマルチスレッドですが、信号処理を行う部分はシングル スレッドです。
マルチスレッドが問題にならない場合、Boost.Signal よりも Boost.Signals2 を優先する理由はありますか?
c++ - C++ ブースト信号コピー接続
boost::signal はコピーできないことは知っていますが、接続を繰り返して接続をコピーできる方法はありますか? のように、すべてのスロットとそれらを別の信号に移動しますか?
配列のラッパーとして機能するクラスがあり、配列内のデータが変更されるたびにクラスが通知するためです。シグナルへのポインターを使用していましたが、シグナル ポインターをオブジェクトの残りの部分と共にコピーすることは明らかに意味がありません。
それで、信号を反復して、添付されている関数をコピーすることが可能かどうか疑問に思っていますか?
ブースト信号でこれを行うことができない場合、これを可能にする信号ライブラリはありますか?