#ifndef __SIKI_EVENTS_DELEGATE_H__ #define __SIKI_EVENTS_DELEGATE_H__ #include #include #include "Handler.h" namespace siki{ namespace events{ /*************************************************************************** * template class Delegate * * 簡易デリゲートクラス * 複数の関数オブジェクトを登録し、一度に呼び出すことを可能にする。 * * 使用する場合は boost::signal のビルドが必要。 * */ template class Delegate{ public: /*********************************************************************** * 内部で使用するシグナルの型 */ typedef boost::signal signal_type; public: /*********************************************************************** * デフォルトコンストラクタ * シグナルを作成する */ Delegate():m_signal(){} /*********************************************************************** * デストラクタ */ virtual ~Delegate(){} /*********************************************************************** * 関数オブジェクトを追加する * @param1 &slot 追加する関数オブジェクト * @return boost::signals::connection コネクション */ template inline boost::signals::connection Add(handler &slot){ return m_signal.connect(slot); } /*********************************************************************** * 関数オブジェクトを追加する * @param1 &slot 追加する関数オブジェクト * @return boost::signals::connection コネクション */ template inline boost::signals::connection operator +=(handler &slot){ return Add(slot); } /*********************************************************************** * 関数オブジェクトの登録を解除する * @param1 boost::signals::connection コネクション * @return void */ inline void Remove(boost::signals::connection con){ con.disconnect(); } /*********************************************************************** * 関数オブジェクトとの登録を解除する * @param1 boost::signals::connection コネクション * @return void */ inline void operator -=(boost::signals::connection con){ Remove(con); } /*********************************************************************** * シグナルを取得する * @param1 void * @return signal_type = boost::signal シグナル */ signal_type &get_signal(){ return m_signal; } /*********************************************************************** * シグナルを取得する * @param1 void * @return signal_type = boost::signal シグナル */ signal_type &operator()(){ return m_signal; } private: // シグナルの実体 signal_type m_signal; }; }} // namespace siki::events #endif // __SIKI_EVENTS_DELEGATE_H__