Для библиотеки я хотел бы, чтобы функция приняла другую функцию и ее аргументы, а затем сохранила их для вызова позже. Аргументы должны допускать любую смесь типов, но функции должны возвращать только пустоту. Что-то вроде этого:Чистый способ хранения функции и ее аргументов (произвольного типа, произвольного числа)
void myFunc1(int arg1, float arg2);
void myFunc2(const char *arg1);
class DelayedCaller
{ ...
public:
static DelayedCaller *setup(Function func, …);
};
...
DelayedCaller* caller1 = DelayedCaller::setup(&myFunc1, 123, 45.6);
DelayedCaller* caller2 = DelayedCaller::setup(&myFunc2, "A string");
caller1->call(); // Calls myFunc1(), with arguments 123 and 45.6
caller2->call(); // Calls myFunc2(), with argument "A string"
Один подход, чтобы сделать DelayedCaller :: Настройка() принимают зЬй :: функции, и есть мои пользователи библиотеки используют зЬй :: Bind() перед вызовом установки(). Однако есть ли способ реализовать setup(), чтобы пользователям не нужно было связывать себя?
Редактировать: DelayedCaller - это существующий класс. setup() - это новый статический метод, который я бы хотел добавить.
Вы можете использовать std :: async с ленивой оценкой. Он возвращает объект std :: future, который сохраняет задачу позже. – Snps