【问题标题】:Create an Observable you can unsubscribe from in RxCpp创建一个可以在 RxCpp 中取消订阅的 Observable
【发布时间】:2015-04-23 15:11:12
【问题描述】:

我正在从 C# 中移植一些严重依赖 Rx 的代码,但我很难找到一些最常用的 C# 方法的 C++ 等效项。

特别是,我想从订阅/取消订阅逻辑创建一个 observable。在 C# 中,我使用 Observable.Create<TSource> Method (Func<IObserver<TSource>, Action>) 覆盖来创建一个 observable。比如

var observable = Observable.Create<int>(observer =>
{
    observers.Add(observer);
    return () =>
    {
        observers.Remove(observer)
    };
});

RxCpp 也可以这样做吗?我认为答案在于rx::observable&lt;&gt;::create(OnSubscribe os) 方法,但我不知道如何使用它来“注册”退订 lambda。

【问题讨论】:

    标签: c# c++ system.reactive rxcpp


    【解决方案1】:

    在 RxCpp 和 RxJava 中 .subscribe() 接受一个订阅者。订阅者是绑定在一起的订阅者和观察者。

    在 RxCpp 中,您的示例可能如下所示:

    std::shared_ptr<std::list<rxcpp::subscriber<int>>> observers(new std::list<rxcpp::subscriber<int>>());
    
    auto observable = rxcpp::observable<>::create<int>([=](rxcpp::subscriber<int> out){
        auto it = observers->insert(observers->end(), out);
        it->add([=](){
            observers->erase(it);
        });
    });
    

    注意:rxcpp::subscriber&lt;int&gt; 是一个类型遗忘器,它隐藏了观察者的类型。这允许它存储在一个集合中,但为 on_next、on_error 和 on_completed 引入了虚函数。

    【讨论】:

    • 所以你在订阅者对象上注册回调而不是返回它。现在我明白了,非常感谢。
    猜你喜欢
    • 2020-08-29
    • 1970-01-01
    • 2019-01-21
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    • 2018-07-21
    • 2019-03-19
    • 2018-12-12
    相关资源
    最近更新 更多