Вам понадобится базовый класс с функцией emit ():
template<class Ret>
class SigBase {
public:
virtual Ret emit()=0;
};
, а затем некоторая его реализация:
template<class Ret, class Param1>
class SigDerived : public SigBase<Ret>
{
public:
SigDerived(sigc::signal<Ret, Param1> *m, Param1 p) : m(m), p(p){ }
Ret emit() { return m->emit(p); }
private:
sigc::signal<Ret, Param1> *m;
Param1 p;
};
Тогда карта является просто указателем на базукласс:
std::map<std::string, SigBase<Ret> *> mymap;
РЕДАКТИРОВАТЬ: Может быть лучше, если SigBase не имеет значение Ret, но вместо этого поддерживает только возврат void.