首页 > 解决方案 > 如何通过 lamda 移动承诺?

问题描述

我想将一个承诺移到一个回调函数(onConcatenated)中。

以下是当前正常工作的示例。

void onConcatenated(void)
{
    std::cout << "Callback triggered " << std::endl;
}

int main(int argc, char *argv[])
{    
    // Let's subscribe for the 'concatenated' signals
    concatenatorProxy->uponSignal("concatenated").onInterface(interfaceName).call([](){ onConcatenated(void); });
    concatenatorProxy->finishRegistration();
.
.
}

到目前为止我所做的是

  void onConcatenated(std::promise<int> p)
  {
      std::cout << "Callback triggered " << std::endl;
      p.set_value(1);
  }
  std::promise<int> promise;
  std::future<int> future = promise.get_future();

  concatenatorProxy->uponSignal("concatenated").onInterface(interfaceName).call([](){ onConcatenated(std::move(promise)); });

但是我遇到了error: ‘promise’ is not captured编译错误。

我最终想要的是阻止调用函数,直到回调触发并执行类似 promise.set_value允许调用函数继续的操作。

标签: c++lambdapromise

解决方案


推荐阅读