Передайте аргументы, упакованные в param, в std :: queue для последующего вызова с другой функцией - PullRequest
0 голосов
/ 03 февраля 2020

Я задавал подобный вопрос ранее, не понимая, что этого недостаточно. c.

Итак, у меня есть эта функция, которая должна принимать все аргументы функции печати вместе с. ... и все, а затем поместите его в очередь, которая позже вызовет реальную функцию печати. ​​

Что-то вроде:

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 Ответ

3 голосов
/ 03 февраля 2020

Что-то вроде этого возможно:

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();
}
...