如何使用 RxCpp 创建重播主题

How to create a ReplaySubject with RxCpp?

本文关键字:创建 何使用 RxCpp      更新时间:2023-10-16

在我的 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();
  }

我想你正在寻找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("%dn", v); // this will print '3'
    });