Передайте аргументы, упакованные с параметрами, в std::queue, чтобы позже вызвать другую функцию
Я задал аналогичный вопрос ранее, не осознавая, что он недостаточно конкретен.
Итак, у меня есть эта функция, которая должна принимать все аргументы функции печати с... и всем остальным, а затем помещать ее в очередь, которая позже вызовет фактическую функцию печати.
Что-то типа:
std::queue<SOMETHING> queue;
template <typename... Params>
void printLater(int a, int b, char* fmt, Params ...args) {
queue.push(args);
}
template <typename... Params>
void print(int a, int b, char* fmt, Param ...args) {
//whatever
}
void actuallyPrint() {
//whatever
print(queue.pop());
}
Контекст: я работаю с оборудованием, которое может обрабатывать запросы только каждые 50 мс, иначе они игнорируются. Моя цель - создать оболочку, которая автоматически добавит задержки, если я отправлю ее сразу несколько раз.
Мой запасной вариант, если я не могу это сделать, хотя я бы предпочел, чтобы это было просто sprintf (или эквивалент C++) в строку, сохраняю только строку в очереди и вызываю print()
без всех аргументов.
1 ответ
Возможно, что-то вроде этого:
std::queue<std::function<void()>> queue;
template <typename... Params>
void printLater(int a, int b, char* fmt, Params ...args) {
queue.push([=](){ print(a, b, fmt, args...); } );
}
void actuallyPrint() {
queue.front()();
queue.pop();
}