Kontener dla wskaźników do funkcji składowych z różnymi argumentami

Szukam wszędzie (nowoczesny projekt C ++ i co), ale nie mogę znaleźć dobrego sposobu na przechowywanie zestawu wywołań zwrotnych, które akceptują różne argumenty i działają na różnych klasach. Potrzebuję tego, ponieważ chciałbym, aby każdy obiekt mojej aplikacji miał możliwość odroczenia wykonania jednej z jego metod do mistrzaClock obiekt, który śledząc aktualny czas, może wywołać tę metodę w odpowiednim momencie. Kod, do którego dążę, jest podobny do:

wvoid executeAction1Deferred(int time, int arg1, bool arg2) metodaclass1, gdzie czas jest czasem wykonania w przyszłości, powinno być coś takiego:

Clock::defer(time, Class1::action1, this, arg1, arg2);

WClock::defer(??? what signature ????) obiekt reprezentujący to zadanie jest przechowywany w kolejce priorytetowej, gdzie czas jest kluczem. Dla każdegoClock kwantowa lista zadań jest następnie przechodzona, a zadania, które muszą zostać uruchomione w tym kwantie, zostaną wykonane. Zauważ, że użyłem „odroczenia” jako funkcji statycznej, ponieważ zamierzamClock obiekt singletonu, ale może to być także funkcja członkowska, to tylko kwestia wyboru.

Myślałem o użyciuvoid* zachować zmienną liczbę argumentów, ale mając mojąaction1() metoda akceptującavoid* jest dość straszne, również dlatego, że musiałbym utworzyć strukturę argumentu za każdym razem, gdy używam tej funkcji bezpośrednio, bez jej odraczania.

Stawiałem czoła tym problemom w przeszłości i nigdy nie znalazłem naprawdę przyzwoitego rozwiązania. Proszę zauważyć, że jest to mały projekt wieloplatformowy, w którym prostota budowania dla niedoświadczonych programistów, która mogłaby go rozszerzyć, jest niezbędna, nie chcę korzystać z boostu. Ale każdy kompilator dla platform, które adresujemy, mastd::tr1 wiązać. Pytanie brzmi: jak zdefiniować kontener funkcji ogólnych, z których każdy akceptuje zmienną liczbę parametrów (do N ~ 5) i jest inną metodą składową obiektów, które nie pochodzą ze wspólnej klasy wirtualnej? Dzięki

questionAnswers(3)

yourAnswerToTheQuestion