c++ - 创建 Task then 函数(如 std::future.then)

标签 c++ c++11

因为我们可能需要稍等一下,直到 std::future::then已实现 我目前正在尝试编写一个非常简单的任务包装器,问题是调用回调函数。假设我们有一个类:

template<typename... ARG>
class Task
{
public:
    typedef std::function<void(ARG...)> task_func_t;

    Task() {}

    void then(task_func_t callback) { this->callback_ = callback; }

    void finish(ARG... arguments)
    {
        this->callback_(std::forward<ARG>(arguments)...);
    }

    void operator()(ARG... arguments)
    {
        this->callback_(std::forward<ARG>(arguments)...);
    }

private:
     task_func_t callback_;
};

让我们假设以下用法:

std::shared_ptr<Task<int>> sum(int n1, int n2)
{
    auto ptr = std::make_shared<Task<int>>();
    myPool.process([n1, n2, ptr]
    {
        (*ptr.get())(n1 + n2);
    }
    return ptr;
}

void test()
{
    sum(5, 6)->then([](int sum) { std::cout << "Sum is " << sum << std::endl };
}

我有时会遇到在函数实际设置之前调用回调的问题。我知道只要回调无效我就可以检查,但我不太喜欢这个解决方案,那么还有其他智能解决方案吗?我实际上想过这样做:

return task.before(do prepare work);

.then(process result)

那么当链接完成时它会调用创建线程。完美的解决方案是调用 then以前作为要求,但我认为只要我想要这个设计,它实际上是不可能的。

最佳答案

您可以等待条件变量。使其成为任务类的成员,并在设置函数后向其发出信号。

关于c++ - 创建 Task then 函数(如 std::future.then),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340083/

相关文章:

c++ - 友元函数无法访问私有(private)结构

c++ - cvtColor 太慢

c++ - 怀疑std::array C++11库坏了?我该怎么办?

c++ - 函数指针和成员函数指针的区别

c++ - 将结构与消息一起发送,累积消息并重新发送给 Veins 中的邻居

c++ - curl openssl 编译 mingw 出现很多链接器错误

c++ - Pthread实例变量运行类中的方法

c++从 vector 中删除自定义对象:std::remove_if':找不到匹配的重载函数

c++ - 使用 CRTP 时 clang++ 不接受使用模板模板参数

c++ - 在模板类中使用模板方法