首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rxcpp:如何复制OfType运算符?

Rxcpp:如何复制OfType运算符?
EN

Stack Overflow用户
提问于 2020-04-06 08:59:32
回答 1查看 44关注 0票数 0

我有课:

class base_event;

有几个类派生自它:

代码语言:javascript
复制
class event_1 : base_event;
class event_2 : base_event; 

我有一个观察点:

observable<base_event> o

我想订阅o,并分别获得event_1和event_2。

代码语言:javascript
复制
o.of_type(event_1).subscribe([](event_1& e){});
o.of_type(event_2).subscribe([](event_2& e){});

有没有像这样创建of_type操作符的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-06 14:11:44

表达of_type的一种方法是使用

代码语言:javascript
复制
o.filter([](const shared_ptr<base_event>& be){ 
  return dynamic_cast<event_1*>(be.get()) != nullptr;
})
.map([](const shared_ptr<base_event>& be){
  return static_pointer_cast<event_1>(be);
})

另一种是使用

代码语言:javascript
复制
.map([](const shared_ptr<base_event>& be){
  auto event = dynamic_pointer_cast<event_1>(be);
  if (event == nullptr) { return empty<event_1>().as_dynamic();}
  return just<event_1>(event).as_dynamic();
})
.concat()

我更喜欢第一个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61051503

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档