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