Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在rxcpp中处理请求/响应流_C++_C++11_Reactive Programming_Rxcpp - Fatal编程技术网

C++ 如何在rxcpp中处理请求/响应流

C++ 如何在rxcpp中处理请求/响应流,c++,c++11,reactive-programming,rxcpp,C++,C++11,Reactive Programming,Rxcpp,我需要在rxcpp中实现一个摄像头采样系统。。我想象的方式是将requestStream作为param传递,然后接收responseStream 每次调用requestSample时,都会创建一个新的摄像头会话,当为requestStream调用on_complete()时,摄像头会话将终止 observable<ImageSample> requestSampleStream(observable<ImageRequest> requestStream$) { au

我需要在rxcpp中实现一个摄像头采样系统。。我想象的方式是将requestStream作为param传递,然后接收responseStream

每次调用requestSample时,都会创建一个新的摄像头会话,当为requestStream调用on_complete()时,摄像头会话将终止

observable<ImageSample> requestSampleStream(observable<ImageRequest> requestStream$) {
  auto response$ = rxcpp::observable<>::create<ImageSample>(
  [&](rxcpp::subscriber<ImageSample> s){
    auto request_next = [&](ImageRequest imageRequest) {
      cout << "image request next" << endl;
      SampleImage vsi;
      s.on_next(vsi);
    };

    auto request_completed = [&] {
      cout << "no more samples needed.. close camera" << endl;
      s.on_completed();
    };

    auto request_error = [&](std::exception_ptr e) {
      try { rethrow_exception(e); }
      catch (const exception &ex) {
        cerr << "error happened on request stream.. close the camera and send error on return stream" << endl << ex.what() << endl;
      }

      s.on_error(e);
    };

    requestStream$.subscribe(request_next,
                              request_error,
                              request_completed
    );
  });

  return response$;
}
observable requestSampleStream(observable requestStream$){
自动响应$=rxcpp::可观察::创建(
[&](rxcpp::订户s){
自动请求\u next=[&](ImageRequest ImageRequest){

cout
s
是一个本地堆栈变量,但lambda正在捕获对
s
的引用。调用lambda时,此引用无效。将
[&]
更改为
[=]
,这样应该可以工作

另一个选项是使用现有的
map
algo

observable<ImageSample> requestSampleStream(observable<ImageRequest> requestStream$) {
    return requestStream$ |
        map([](ImageRequest imageRequest){
            cout << "image request next" << endl;
            SampleImage vsi;
            s.on_next(vsi);
        })
        // optional
        | tap([&](std::exception_ptr e) {
            try { rethrow_exception(e); }
            catch (const exception &ex) {
                cerr << "error happened on request stream.. close the camera and send error on return stream" << endl << ex.what() << endl;
            }
        },
        [](){
            cout << "no more samples needed.. close camera" << endl;
        })
        ;
}
observable requestSampleStream(observable requestStream$){
返回请求流$|
映射([](ImageRequest ImageRequest){

cout Spot on..什么是rxcpp-ish更有效的方法?通过map+tap?是的,使用现有的map算法比使用create来复制map要好。我唯一的问题是map的结果是异步的,所以map无法同步返回..有解决方法吗?通常使用flat_map来获得异步结果。'flat_map'只是'map()| merge()'其中映射返回一个“可观察的”