BoostBoost.Signals: クラステンプレート signalN

ヘッダ

N はサポートされているシグナルのパラメタ数である。 つまり、 ヘッダ <boost/signals/signal0.hpp> には signal0 が含まれており、 ヘッダ <boost/signals/signal1.hpp> には signal1 が含まれている。 サポートされているシグナルの最大パラメタ数は実装定義だが、 最低 10 であることが要求される。

#include <boost/signals/signalN.hpp>

概要

本ドキュメントは複数の関係するクラス signal0, signal1, signal2 などを扱う。 ここで末尾の数値は、シグナルとそれに接続されたスロットがとるパラメタ数を表す。 すべてのクラスを列挙する代わりに、 単一の例 signalN について記述する。 なお N は関数のパラメタ数を表す。

namespace boost {
  template<typename R,
           typename T1,
           typename T2,
           ...
           typename TN,
           typename Combiner = last_value<R>,
           typename Group = int,
           typename GroupCompare = std::less<Group>,
           typename SlotFunction = boost::functionN<R, T1, T2, ..., TN> >
  class signalN :
    boost::noncopyable, // 開示用 : クラスは Noncopyable 要求を満たす
    boost::trackable
  {
  public:
    typedef typename Combiner::result_type result_type;
    typedef Combiner combiner_type;
    typedef Group group_type;
    typedef GroupCompare group_compare_type;
    typedef SlotFunction slot_function_type;
    typedef slot<slot_function_type> slot_type;
    typedef implementation-defined slot_result_type; SlotFunction が戻り値型 void を持つ場合は void でない可能性がある; そのほかの場合には SlotFunction の戻り値型
    typedef implementation-defined slot_call_iterator; // value_typeR である InputIterator
    typedef T1 argument_type; // N == 1 のとき、シグナルは AdaptableUnaryFunction のモデルである
    typedef T1 first_argument_type; // N == 2 のとき、シグナルは AdaptableBinaryFunction のモデルである
    typedef T2 second_argument_type; // N == 2 のとき、シグナルは AdaptableBinaryFunction のモデルである
    
    typedef T1 arg1_type;
    typedef T2 arg2_type;
             .
             .
             .
    typedef TN argN_type;

    explicit signalN(const combiner_type& = combiner_type(), const group_compare_type& = group_compare_type());
    ~signal();
    signals::connection connect(const slot_type&);
    signals::connection connect(const group_type&, const slot_type& slot);
    void disconnect(const group_type&);
    void disconnect_all_slots();
    bool empty() const;
    result_type operator()(T1 a1, T2 a2, ..., TN aN);
    result_type operator()(T1 a1, T2 a2, ..., TN aN) const;

  private:
    combiner_type combiner; // 開示用
  };
}

関連型

Combiner

Combiner はイテレータのシーケンス [first, last) を受け取り、 シーケンス中のいくつかのイテレータを参照外しして値を戻す関数オブジェクトである。 Combiner に渡されるイテレータの型は slot call iterator である。

Group

Group は、接続をグループ化するために用いる型を定義する。これは DefaultConstructible かつ CopyConstructible でなければならない。

GroupCompare

GroupCompare は、実引数型が group type と一致する BinaryPredicate である。 これは接続グループの順序関係を定める。

SlotFunction

SlotFunction は、 他の互換性がある関数オブジェクトからコンストラクト可能な関数オブジェクトアダプタであることが要求される (互換性は SlotFunction それ自身によって定義される)。 SlotFunction は T1, T2, .. TN 型のパラメタを受け取り、 シグナルのテンプレートパラメタ型 R に変換可能な結果を返す必要がある; ただし R が void である場合には SlotFunction の戻り値型はすべて無視されることに注意。

他のシグナルへの接続、ならびに関数オブジェクトの参照への接続では、 SlotFunction は reference_wrapper オブジェクトを受理可能である必要がある。


メンバ

slot_result_type

SlotFunctionvoid を戻す場合、 スロットの戻り値型は実装定義である; そうでないばあいにはスロットの戻り値型は SlotFunction 関数オブジェクトによって戻される型であることが要求される。

slot_call_iterator

value_typeR であるような InputIteratorslot_call_iterator の参照外し演算子は、 指定された実引数を与えてスロットを呼び出し、その結果を戻す責任を負う。 イテレータを複数回参照外ししたときでもスロットが一度だけ呼び出されることを保証するため、 結果はキャッシュされなければならない。


コンストラクタ

explicit signalN(const combiner_type& = combiner_type(), const group_compare_type& = group_compare_type());


デストラクタ

~signal();


接続管理

signals::connection connect(const slot_type& slot);

signals::connection connect(const group_type& group, const slot_type& slot);

void disconnect(const group_type& group);

void disconnect_all_slots();

bool empty() const;


シグナル呼び出し

result_type operator()(T1 a1, T2 a2, ..., TN aN);
result_type operator()(T1 a1, T2 a2, ..., TN aN) const;

Doug Gregor
Last modified: Fri Oct 11 05:42:42 EDT 2002