如何使用RxCpp创建ReplaySubject?

时间:2019-07-15 11:32:13

标签: c++ rxcpp

在我的c ++项目中,我需要创建一个具有初始值的主题,该主题可能会被更新。在每次订阅/更新时,订阅者都可以触发然后进行数据处理...在以前的Angular(RxJS)项目中,这种行为是通过ReplaySubject(1)处理的。

我无法使用c++ rxcpp lib复制此文件。

我一直在寻找文档,摘要,教程,但没有成功。

预期的伪代码(打字稿):


private dataSub: ReplaySubject<Data> = new ReplaySubject<Data>(1);

private init = false;

// public Observable, immediatly share last published value
get currentData$(): Observable<Data> {

    if (!this.init) {
      return this.initData().pipe(switchMap(
        () => this.dataSub.asObservable()
      ));
    }
    return this.dataSub.asObservable();
  }

1 个答案:

答案 0 :(得分:0)

我认为您正在寻找rxcpp :: subjects :: replay。 请尝试以下方法:

    auto coordination = rxcpp::observe_on_new_thread();
    rxcpp::subjects::replay<int, decltype(coordination)> test(1, coordination);

    // to emit data
    test.get_observer().on_next(1);
    test.get_observer().on_next(2);
    test.get_observer().on_next(3);

    // to subscribe
    test.get_observable().subscribe([](auto && v)
        printf("%d\n", v); // this will print '3'
    });