C++ Rxcpp:如何复制OfType运算符?

C++ Rxcpp:如何复制OfType运算符?,c++,reactive-programming,rxcpp,C++,Reactive Programming,Rxcpp,我有课: 类基本事件 它衍生出几个类别: class event_1 : base_event; class event_2 : 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类型运算符?表示

我有课:

类基本事件

它衍生出几个类别:

class event_1 : base_event;
class event_2 : 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类型运算符?

表示of类型的
的一种方法是使用

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

o.filter([](const shared_ptr&be){
返回动态_cast(be.get())!=nullptr;
})
.map([](常数共享\u ptr&be){
返回静态\u指针\u转换(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()
.map([](常量共享){
自动事件=动态指针转换(be);
如果(event==nullptr){return empty().as_dynamic();}
返回just(event).as_dynamic();
})
.concat()

我喜欢第一个

嗨,柯克,这就是我最后要做的。不幸的是,我无法在没有共享指针的情况下解决这个问题,因为dyamic_cast无法处理引用。我还没有测试原因,但我粗略的猜测可能是rxcpp中的某个地方正在生成一个显式副本,而有关派生副本的信息不知何故正在丢失。我可能与真正的原因相去甚远。在任何情况下,你摆出的姿势都是有效的。谢谢是的,rxcpp不是干净的参考。我没有努力,因为有很多地方需要复印。所有多播和基于时间和调度器的运营商都会进行复制,因为他们会放弃调用堆栈或将相同的值传递给多个使用者。