0

我有课:

class base_event;

几个类派生自它:

class event_1 : base_event;
class event_2 : base_event; 

我有一个可观察的:

observable<base_event> o;

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

o.of_type(event_1).subscribe([](event_1& e){});
o.of_type(event_2).subscribe([](event_2& e){});

有没有办法像这样创建 of_type 运算符?

4

1 回答 1

1

一种表达方式of_type是使用

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);
})

另一种是使用

.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()

我更喜欢第一个。

于 2020-04-06T06:11:43.517 回答