0

我想使用 boost 光纤来完成与外部服务的异步通信。我为每个单独的光纤使用一组承诺和未来,以在单独的阅读器光纤上调用,以唤醒等待未来的发起者光纤。

问题是我无法弄清楚 lambda 函数的类型。我尝试使用 std::function 和 std::bind。但我没有设法找出正确的类型。

回调的结构如下:

struct AsyncClientCall {
    std::string response;
    bool status;    // Storage for the status of the RPC upon completion.
    // what is the proper type for this
    std::function<void()> callback;
};

它适用于 POD,例如:

    asyncCall->callback = [i = msg] () mutable {
        std::cout << "release the lock: " << i << std::endl; 
    };

但它不适用于 boost::fibers::promise,因为没有复制构造函数:

    asyncCall->callback = [p = std::move(promiseRsp)] () mutable {
        p.set_value();
    };

但是 lambda 本身没有问题,因为它可以正常工作

auto  callback = [p = std::move(promiseRsp)] () mutable {
    p.set_value();
};  

所以我的问题是,如果我想使用 promise 进行光纤之间的同步,如何正确解决这个问题

4

0 回答 0