Rx-cpp
にobserver/observable
パターンを実装しようとしています。これらは、誰かがこれにどのように対処できるかについて、非常に興味深いtutorialであるRx.Net
です。このC#
例でRxCppを使用してObserver/Observableパターンを構築する
、我々はオーバーライドする必要があり、そのinterfaces
特定があります。
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);
}
を私が理解する限りでは、Rx-cpp
に、このような利便性はありませんが。ですから、上記のinterfaces
と同様のヘッダーの例(myObservable.h
/myObserver.h
)を私に提供することが可能ですか?同じ通信パターンを定義するためのガイダンスとして使用できますか?
ご協力いただきありがとうございます。 ありがとうございました!
EDIT 1:@zentrunix
から おかげで、私はクラス指向の通信をしようとしています。これまでは、観測可能なパターンのコードがあります。私が望むのは、私が観察可能なものに添付される観察者のリストを定義することです。OnNext
と呼ばれる人にこれらの観察者に通知する必要があります。しかし、欠けている部分があります。
- どのようにすることができます私はそれらのオブザーバー
myObservable::Subscribe()
関数が呼び出される(Rx::subscribers<int>
)にsubscribe()
。 - どうすればいいですか
unsubscribe()
。 - 最後に、複数の
onNext
オブザーバーの対応するo.subscribe(onNext, onEnd);
はどのようになりますか?対応するmyObserver
クラスを構築することは可能でしょうか?尋ねるため 申し訳ありませんが(再びhereに触発さ)が、それは意味のある、そのような組織ですか?これまで私はこのtutorialで提供されているアーキテクチャを使用していました。これが私がこの作業に夢中になっている理由です。私はそれを
RxCpp
に関与する方法として見つけました。すべてのコメントは高く評価されています。 (自分の無知のために再び申し訳ありません。)class myObservable { private: std::shared_ptr<std::list<rxcpp::subscriber<int>>> observers; public: myObservable() { observers = std::make_shared<std::list<Rx::subscriber<int>>>(); }; Rx::observable<int> Attach(std::shared_ptr<rxcpp::subscriber<int>> out) { return Rx::observable<>::create<int>([&, out]() { auto it = observers->insert(observers->end(), *out); it->add([=]() { observers->erase(it); }); }); }; void OnNext(int sendItem) { for (Rx::subscriber<int> observer : *observers) { (observer).on_next(sendItem); } } void Disposer(Rx::subscriber<int> out) { observers->erase(std::remove(observers->begin(), observers->end(), &out), observers->end()); }; };
私がしようとしているのは、 'RxCpp''オブザーバー'と 'observable'関数を継承する2つのクラスを構築することです。 'Rx.Net'の例では、これは' class myIObserver:IObserver 'によって行われます。これは、 'virtual'にクラスを変換する方法ではなく、むしろSubjectObserver'と同じ機能を実行し、 'myObserver.h'と' myObservable.h'を構築する方法:IObserver 'と' SubjectObservable:IObservable '相応。彼に感謝します。 –
Thoth
私は 'c#' 'interfaces'をつける理由は' 'OnComplete()' 'OnNext(T value)'など)を実装しなければならないためです。 – Thoth
あなたの質問は言い換える必要があると思います。また、私はちょうどいくつかのRxCppソース(例えば、https://github.com/Reactive-Extensions/RxCpp/blob/master/Rx/v2/src/rxcpp/rx-observer.hpp)を見てきました。インタフェースのように見えるものはすべて見てください。私はあなたが完全に間違った方法でこれに近づいているかもしれないと思います。 – Rook