新しい信号を登録したり、信号に接続したりするための中心的な場所が必要です。今私はsigc++を使うことを考えました。ただし、このテンプレートベースのライブラリのラッパークラスをコーディングする方法がわかりません。次のようなもの:
class EventManager {
public:
... singleton stuff ...
template<typename ReturnType, typename Params>
bool registerNewSignal( std::string &id )
{
sigc::signal<ReturnType, Params> *sig = new sigc::signal<ReturnType, Params>();
// put the new sig into a map
mSignals[ id ] = sig;
}
// this one should probably be a template as well. not very
// convenient.
template<typename ReturnType, typename Params>
void emit( id, <paramlist> )
{
sigc::signal<ReturnType, Params> *sig = mSignals[ id ];
sig->emit( <paramlist> );
}
private:
std::map<const std::string, ???> mSignals;
};
何を置き換える必要がありますか?マップを汎用化するために使用しますが、指定されたIDに応じたシグナルを取得し、指定されたparamlistを使用してシグナルを送信することもできます。これも処理方法がわかりません。