我想使用 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 进行光纤之间的同步,如何正确解决这个问题