Container für Zeiger auf Memberfunktionen mit unterschiedlichen Argumenten

Ich suche überall (Modernes C ++ - Design & Co.), aber ich kann keine gute Möglichkeit finden, eine Reihe von Rückrufen zu speichern, die unterschiedliche Argumente akzeptieren und mit unterschiedlichen Klassen arbeiten. Ich brauche dies, weil ich möchte, dass jedes Objekt meiner Anwendung die Möglichkeit hat, die Ausführung einer seiner Methoden auf einen Master zu verschiebenClock Objekt, das die aktuelle Zeit verfolgt und diese Methoden im richtigen Moment aufruft. Der Code, den ich anstrebe, ist in etwa so:

In demvoid executeAction1Deferred(int time, int arg1, bool arg2) Methode vonclass1Wo die Ausführungszeit in der Zukunft liegen soll, sollte es ungefähr so ​​aussehen:

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

ImClock::defer(??? what signature ????) Ein Objekt, das diese Aufgabe darstellt, wird in einer Prioritätswarteschlange gespeichert, in der die Zeit der Schlüssel ist. Für jedenClock quantum Die Liste der Tasks wird dann durchlaufen und die Tasks, die in diesem Quantum ausgeführt werden müssen, werden ausgeführt. Beachten Sie, dass ich "defer" als statische Funktion verwendet habe, weil ich das beabsichtigeClock Objekt eines Singleton, aber es könnte auch eine Member-Funktion sein, es ist nur eine Frage der Wahl.

Ich habe darüber nachgedachtvoid* eine variable Anzahl der Argumente zu behalten, aber mit meineraction1() Akzeptanzmethode avoid* ist ziemlich schrecklich, auch weil ich jedes Mal, wenn ich diese Funktion direkt benutze, eine Struktur für das Argument erstellen müsste, ohne es zu verschieben.

Ich habe mich in der Vergangenheit mehrmals mit diesen Problemen auseinandergesetzt und nie eine wirklich anständige Lösung gefunden. Bitte beachten Sie, dass dies ein kleines plattformübergreifendes Projekt ist, bei dem die Einfachheit des Aufbaus für unerfahrene Programmierer, die es erweitern könnten, von entscheidender Bedeutung ist. Daher möchte ich Boost nicht verwenden. Aber jeder Compiler für die Plattformen, die wir ansprechen, hatstd::tr1 binden. Die Frage ist: Wie kann ein Container mit generischen Funktionen definiert werden, von denen jede eine variable Anzahl von Parametern (bis zu N ~ 5) akzeptiert und eine andere Elementmethode für Objekte darstellt, die nicht von einer gemeinsamen virtuellen Klasse abgeleitet sind? Vielen Dank

Antworten auf die Frage(3)

Ihre Antwort auf die Frage