c# - 创建一个你可以在 RxCpp 中取消订阅的 Observable

标签 c# c++ system.reactive rxcpp

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

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

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

是否可以对 RxCpp 做同样的事情? ?我认为答案在于 rx::observable<>::create(OnSubscribe os)方法,但我不知道如何使用它来“注册”一个取消订阅的 lambda。

最佳答案

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

在 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<int>是一个隐藏观察者类型的类型遗忘器。这允许它存储在一个集合中,但为 on_next、on_error 和 on_completed 引入了虚函数。

关于c# - 创建一个你可以在 RxCpp 中取消订阅的 Observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827577/

相关文章:

c++ - 与相应的 cpp 代码相比,为什么这个 bash 代码这么慢?

c# - System.Concurrency.AsyncLock 有什么作用?

c# - 如何使用 C# 执行协程?

c# - 无法获取要跟踪的 ApplicationInsights

c# - Contract.Requires 在没有安装 Code Contracts 的情况下构建时会发生什么?

c# - 为什么文本从此组合框中被截断?

c# - 如何在 Visual Studio 中配置内部版本号以启用 dll 比较

c++ - 给定条件如何维持发生顺序

c++ - 在没有参数的函数中使用void?

c# - (A)等待多个实例恰好引发一次事件