我试图写一个工作队列,但是直到后来我才真正想知道参数类型,反正我正试图写一些东西来实现
std::queue<std::packaged_task<void()>> workQueue{};
template <typename... Args>
void Foo::doWork(char const* key, Args&&... args)
{
// this already works if called directly but would like to do this work from a separate thread pulling from that queue
}
template <typename... Args>
void Foo::enqueue(char const* key, Args&&... args)
{
// Cannot seem to push this work into a queue type error occurs
workQueue.emplace(std::bind(&Foo::doWork<Args&&...>, this, key, args...));
}
用法示例
foo.enqueue("bar", 3, 4, "wham", true);
我正在尝试尽可能快地将这项工作排入队列,以使尽可能多的工作不在此队列的聚集侧。 我只是将参数序列化为类似stringstream的东西,但是随后我将不得不进行某种类型的转换以在反序列化方面键入action,担心消息+边界等问题,我想避免这种情况。 任何人都知道我在这里可能做错了什么以得到类型错误,还试图避免提升,所以最好使用stl容器。我无法提前了解结构来专门进行此操作。 另外,您还想确保将参数复制到队列中,而不是简单地进行引用,以便即使在从调用函数的堆栈中将其取消分配后,它们也很有用。