Контейнер для указателей на функции-члены с разными аргументами

Я смотрю везде (современный дизайн C ++ и со) но я могуМы не можем найти хороший способ хранения набора обратных вызовов, которые принимают разные аргументы и работают с разными классами. Мне это нужно, потому что я хотел бы, чтобы каждый объект моего приложения имел возможность отложить выполнение одного из его методов на главномClock объект, который, отслеживая текущее время, может вызвать эти методы в нужный момент. Код, к которому я стремлюсь, выглядит примерно так:

вvoid executeAction1Deferred(int time, int arg1, bool arg2) методclass1где время - это время выполнения, которое требуется в будущем, должно быть что-то вроде этого:

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

ВClock::defer(??? what signature ????) объект, который представляет эту задачу, хранится в очереди приоритетов, где время является ключом. Для каждогоClock В этом случае список заданий просматривается, и задачи, которые необходимо выполнить в этом кванте, будут выполнены. Обратите внимание, что я использовалотложить» как статическая функция, потому что я намеренClock объект одиночного объекта, но он также может быть функцией-членом, это 'Это просто вопрос выбора.

Я думал об использованииvoid* сохранить переменное количество аргументов, но имея мойaction1() метод принятияvoid* это довольно ужасно, еще и потому, что мне нужно будет создавать структуру аргумента каждый раз, когда я использую эту функцию напрямую, не откладывая ее.

В прошлом я неоднократно сталкивался с этой проблемой и никогда не находил действительно достойного решения. Обратите внимание, что этот небольшой мультиплатформенный проект, в котором простота сборки для неопытных программистов, которые могли бы его расширить, очень важна, я неЯ не хочу использовать повышение. Но каждый компилятор для платформ, к которым мы обращаемся, имеетstd::tr1 привязывать. Вопрос заключается в следующем: как определить контейнер универсальных функций, каждая из которых принимает переменное число параметров (до N ~ 5) и является другим методом-членом объектов, которые не являются производными от общего виртуального класса? Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос