Zbiór funkcji std :: z różnymi argumentami

Próbuję napisać prosty dyspozytor, kod użytkownika może dołączyć do niego wywołania zwrotne. Każde zdarzenie ma znaną sygnaturę, a kod użytkownika musi wywołać wysyłkę z odpowiednim numerem i typem argumentu. Jest to zarządzane przez zmienne argumenty. Ale wolnostojący nie jest akceptowany, ponieważ wektor nie jest właściwego typu. Jak to zrobić?

Podąża za minimalnym przykładem

void freestanding() {
 std::cout << "freestanding" << std::endl;
}

void freestandingInt(int iArg) {
  std::cout << "freestandingInt " << iArg << std::endl;
}


struct Dispatcher {
 typedef struct Event_ {
   std::vector<std::function<void()> > listeners;
 } Event;

 template<class... Args>
 void dispatch(int eventNr, Args&&... args) {
   for (auto listener: events[eventNr].listeners) {
     std::function<void()> f(std::bind(listener, std::forward<Args>(args)...));
     f();
   }
 }

 std::map<int, Event> events;
};

int main (int argc, char **argv) {
  Dispatcher disp;
  disp.events[0].listeners.push_back(freestanding);
  disp.dispatch(0); // OK

  // error here
  //disp.events[1].listeners.push_back(freestandingInt);

}

questionAnswers(2)

yourAnswerToTheQuestion