3

boost::signals ライブラリのこのチュートリアルの終わりに向かって、「スロットを渡す」という見出しの下で、「slot_type」と呼ばれるタイプを使用して、信号に接続する目的のスロット関数を渡します。しかし、次の例では、「slot_function_type」というタイプを使用して明らかに同じことを行っています。

これら2つの違いが何であるかを理解できませんでした。

「slot_type」と「slot_function_type」はいつ使用すればよいですか?

4

1 に答える 1

3

slot_typeですboost::slot<slot_function_type>

シグナルboost::signal<R(T1, T2, ... TN)>の場合、はと同等slot_function_typeの型消去された関数オブジェクト クラスであるため、シグナルの呼び出しシグネチャをサポートする任意のオブジェクト (関数ポインター、呼び出し可能オブジェクトなど) を保持できます。boost::functionN<R, T1, T2, ... TN>std::function<R(T1, T2, ... TN)>boost::bind

slot_typeからの暗黙的なコンストラクターを含んでいslot_function_typeますが、自動接続管理のための機構も含まれています(チュートリアルの自動接続管理 (中間)boost::trackableを参照してください)。

を使用するslot_type特定の理由がない限りslot_function_type、 を使用する必要があります。これにより、自動接続管理を使用する必要が生じた場合に、それが機能することが保証されます。 slot_typeにはテンプレート化された暗黙のコンストラクターがあるため、slot_function_typeに渡すために機能する場所ならどこでも使用できますboost::signal::connect()

于 2012-08-15T09:11:00.313 に答える