创建一个可以在RxCpp中取消订阅的Observable

时间:2015-04-23 15:11:13

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

我正在从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<>::create(OnSubscribe os)方法,但我无法弄清楚如何使用它来“注册”取消订阅lambda。

1 个答案:

答案 0 :(得分:4)

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