希望有一个中心位置来注册新信号、连接到信号等等。现在我想使用 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 的相应信号,并使用给定的参数列表发出信号——我也不知道如何处理。