首页 > 解决方案 > 尝试排队一些可变的工作

问题描述

我正在尝试编写一个工作队列,但是直到以后我才真正想知道参数类型,无论如何我正在尝试编写一些大意的东西


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);

我正在尝试以合理的速度将这项工作排队,以使尽可能多的工作远离该队列的收集端。我只是将参数序列化为类似字符串流的东西,但随后我将不得不在反序列化方面进行某种类型的强制转换,担心消息+边界等,我想避免这种情况。任何人都知道我在这里可能做错了什么以获得类型错误,还试图避免提升,因此最好使用 stl 容器。我无法提前知道结构来专门研究这个。此外,您还想确保将参数复制到队列中,而不是简单地引用,这样即使在从调用函数的堆栈中取消分配后它们也很有用。

标签: c++c++14variadic-functionspackaged-task

解决方案


推荐阅读