boost::signals ライブラリのこのチュートリアルの終わりに向かって、「スロットを渡す」という見出しの下で、「slot_type」と呼ばれるタイプを使用して、信号に接続する目的のスロット関数を渡します。しかし、次の例では、「slot_function_type」というタイプを使用して明らかに同じことを行っています。
これら2つの違いが何であるかを理解できませんでした。
「slot_type」と「slot_function_type」はいつ使用すればよいですか?
boost::signals ライブラリのこのチュートリアルの終わりに向かって、「スロットを渡す」という見出しの下で、「slot_type」と呼ばれるタイプを使用して、信号に接続する目的のスロット関数を渡します。しかし、次の例では、「slot_function_type」というタイプを使用して明らかに同じことを行っています。
これら2つの違いが何であるかを理解できませんでした。
「slot_type」と「slot_function_type」はいつ使用すればよいですか?
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()
。