0

我之前问了一个类似的问题,但没有意识到这还不够具体。

所以我有这个函数,它必须接受 print 函数的所有参数,包括 ... 和 all,然后将它放入一个稍后将调用实际 print 函数的队列中。

就像是:

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()没有所有参数的情况下调用。

4

1 回答 1

3

可能是这样的:

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();
}
于 2020-02-02T23:06:22.373 回答