Rxcpp:如何复制 OfType 运算符?
Rxcpp: How can I replicate the OfType operator?
我有class:
class base_event;
几个 classes 派生自它:
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 运算符?
表达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()
我更喜欢第一个。
我有class:
class base_event;
几个 classes 派生自它:
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 运算符?
表达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()
我更喜欢第一个。