C# 使用RxCpp构造观察者/可观察模式

C# 使用RxCpp构造观察者/可观察模式,c#,c++,system.reactive,observer-pattern,rxcpp,C#,C++,System.reactive,Observer Pattern,Rxcpp,我试图在中实现一个观察者/可观察者模式。这是一个非常有趣的问题,关于人们如何能够做到这一点 在这个C#示例中,我们必须覆盖一些特定的接口: public interface IObserver<in T> { void OnCompleted(); void OnError(Exception error); void OnNext(T value); } public interface IObservable<out T> { ID

我试图在中实现一个
观察者/可观察者
模式。这是一个非常有趣的问题,关于人们如何能够做到这一点

在这个
C#
示例中,我们必须覆盖一些特定的
接口

public interface IObserver<in T>
{
    void OnCompleted();
    void OnError(Exception error);
    void OnNext(T value);
}


public interface IObservable<out T>
{
    IDisposable Subscribe(IObserver<T> observer);
}

下面是RxCpp中的一个非常简单的示例。 不过(至少)有一个警告:典型的RxCpp代码大量使用lambdas,我非常不喜欢它

我还试图在互联网上找到文档和教程,但找不到。我对线程模型的解释特别感兴趣

如果您愿意阅读代码和Doxygen文档,RXCPPGithub站点中有很多示例

#include <iostream>
#include <exception>

#include "rxcpp/rx.hpp"
namespace rx = rxcpp;

static void onNext(int n) { std::cout << "* " << n << "\n"; }
static void onEnd() { std::cout << "* end\n"; }

static void onError(std::exception_ptr ep)
{
  try { std::rethrow_exception(ep); }
  catch (std::exception& e) { std::cout << "* exception " << e.what() << '\n'; }
}

static void observableImpl(rx::subscriber<int> s)
{
  s.on_next(1);
  s.on_next(2);
  s.on_completed();
}

int main()
{
  auto o = rxcpp::observable<>::create<int>(observableImpl);
  std::cout << "*\n";
  o.subscribe(onNext, onEnd);
} 
#包括
#包括
#包括“rxcpp/rx.hpp”
名称空间rx=rxcpp;

静态void onNext(intn){std::cout是下面RxCpp中的一个非常简单的示例。 不过(至少)有一个警告:典型的RxCpp代码大量使用lambdas,我非常不喜欢它

我还试图在互联网上找到文档和教程,但找不到。我特别感兴趣的是关于线程模型的解释

如果您愿意阅读代码和Doxygen文档,RXCPPGithub站点中有很多示例

#include <iostream>
#include <exception>

#include "rxcpp/rx.hpp"
namespace rx = rxcpp;

static void onNext(int n) { std::cout << "* " << n << "\n"; }
static void onEnd() { std::cout << "* end\n"; }

static void onError(std::exception_ptr ep)
{
  try { std::rethrow_exception(ep); }
  catch (std::exception& e) { std::cout << "* exception " << e.what() << '\n'; }
}

static void observableImpl(rx::subscriber<int> s)
{
  s.on_next(1);
  s.on_next(2);
  s.on_completed();
}

int main()
{
  auto o = rxcpp::observable<>::create<int>(observableImpl);
  std::cout << "*\n";
  o.subscribe(onNext, onEnd);
} 
#包括
#包括
#包括“rxcpp/rx.hpp”
名称空间rx=rxcpp;

静态void onNext(int n){std::cout我想做的是构造两个类,它们继承
RxCpp
observer
observable
函数。在
Rx.Net
示例中,这是由
类myIObserver:IObserver
完成的。这不是如何将类转换为
虚拟的
,而是如何构造
myObserver.h
myObservable.h
执行与
SubjectObserver:IObserver
SubjectObservable:IObservable
相同的功能。感谢他的兴趣。我之所以附加
c#
接口
是因为我对相同的功能进行了镜像(
OnComplete()
OnNext(T值)
等)应该实现,我没有找到其
虚拟的
。我认为你的问题需要重新表述。另外,我刚刚查看了一些RxCpp源代码(例如)没有看到任何看起来像接口的东西。我认为您可能以完全错误的方式处理此问题。您的
MyObserver
可能应该实现一些方法,如
OnNext
,并且有一个成员
rxcpp::observer m_rxObserver
,您可以通过向这些方法传递适当的包装来构造它。当然有一些rxcpp代码的例子,你可以从中使用?很好,我试过
类myIObserver:public Rx::observer
,但没有
虚函数。我也试过
类myIObserver:public Rx::virtual_observer
,但我不知道这是否可以。另外,我在
观察中遇到了严重的问题不存在任何虚拟函数的rvable
模式。再次感谢。我试图构造两个类,继承
RxCpp
observer
observeable
函数。在
Rx.Net
示例中,这是由
类myIObserver:IObserver
完成的。这不是如何转换c我想说的是一个
virtual
,而是如何构造
myObserver.h
myObservable.h
,它们执行与
SubjectObserver:IObserver
SubjectObservable:IObservable
相同的功能。感谢他的兴趣。我附上
c
接口的原因是因为我认为应该实现相同的函数(
OnComplete()
OnNext(T值)
,等等),它们的
virtual
我没有找到。我认为你的问题需要重新表述。另外,我刚刚查看了一些RxCpp源代码(例如)没有看到任何看起来像接口的东西。我认为您可能以完全错误的方式处理此问题。您的
MyObserver
可能应该实现一些方法,如
OnNext
,并且有一个成员
rxcpp::observer m_rxObserver
,您可以通过向这些方法传递适当的包装来构造它。当然有一些rxcpp代码的例子,你可以从中使用?很好,我试过
类myIObserver:public Rx::observer
,但没有
虚函数。我也试过
类myIObserver:public Rx::virtual_observer
,但我不知道这是否可以。另外,我在
观察中遇到了严重的问题rvable
模式,其中没有任何虚拟函数。再次感谢。