创建可在 RxCpp 中取消订阅的可观察量
Create an Observable you can unsubscribe from in RxCpp
我正在从 C# 移植一些严重依赖 Rx 的代码,我很难找到一些最常用的 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() 需要一个订阅者。订阅者是绑定在一起的订阅和观察者。
在 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的虚拟函数。
相关文章:
- 挂起和取消挂起一个文件DLL
- 如何取消对nullptr的屏蔽,返回正确的对象
- C++取消引用指针.为什么会发生变化
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 取消引用运算符不能重载
- 在他自己的方法中,有可能将一个对象取消引用到另一个对象吗
- 如何在Qt中取消捕获字符串
- 如何使用 TStyleManager::UnRegisterStyle() 取消注册样式
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- C++ 关于指针取消引用的技术问题
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 没有取消引用/解包对象的标准方法?
- 列表 iter 不取消引用 使用列表进行插入排序
- C++宏定义和取消定义
- 在这个函数中是有缺陷的,因为取消引用 null 是无效的,所以我想更改代码
- 取消引用结束指针到数组类型的一个
- 取消引用向量时出现问题
- 提升 asio 并发计时器取消问题与链
- 创建可在 RxCpp 中取消订阅的可观察量
- 我们是否应该在取消注册时删除观察者