C# 在RxCpp中创建一个可以取消订阅的可观察项目

C# 在RxCpp中创建一个可以取消订阅的可观察项目,c#,c++,system.reactive,rxcpp,C#,C++,System.reactive,Rxcpp,我移植了一些依赖于RX的C代码,我很难找到C++等价于一些最常用的C方法。 特别是,我想从订阅/取消订阅逻辑创建一个可观察的。在C#中,我使用覆盖来创建一个可观察对象。比如说 var observable = Observable.Create<int>(observer => { observers.Add(observer); return () => { observers.Remove(observer) }; })

我移植了一些依赖于RX的C代码,我很难找到C++等价于一些最常用的C方法。

特别是,我想从订阅/取消订阅逻辑创建一个可观察的。在C#中,我使用覆盖来创建一个可观察对象。比如说

var observable = Observable.Create<int>(observer =>
{
    observers.Add(observer);
    return () =>
    {
        observers.Remove(observer)
    };
});
var observable=observable.Create(observable=>
{
添加观察员(观察员);
return()=>
{
观察员。移除(观察员)
};
});

有没有可能用同样的方法?我认为答案在于
rx::observable::create(OnSubscribe os)
方法,但我不知道如何使用它“注册”取消订阅lambda。

在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);
    });
});
std::shared_ptr observer(新std::list());
自动可观察=rxcpp::可观察::创建([=](rxcpp::订阅服务器输出){
自动it=observators->insert(observators->end(),out);
它->添加([=](){
观察者->删除(它);
});
});

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

因此,您可以在订户对象上注册回调,而不是返回回调。现在我明白了,非常感谢。