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
模式,其中没有任何虚拟函数。再次感谢。