3

Rx に大きく依存している C# からいくつかのコードを移植していますが、最も使用されている C# メソッドのいくつかに相当する C++ を見つけるのに苦労しています。

特に、サブスクリプション/サブスクリプション解除ロジックからオブザーバブルを作成したいと考えています。C# では、Observable.Create<TSource> Method (Func<IObserver<TSource>, Action>)オーバーライドを使用してオブザーバブルを作成します。例えば

var observable = Observable.Create<int>(observer =>
{
    observers.Add(observer);
    return () =>
    {
        observers.Remove(observer)
    };
});

RxCppで同じことを行うことは可能ですか? 答えはrx::observable<>::create(OnSubscribe os)メソッドにあると思いますが、それを使用してサブスクリプション解除ラムダを「登録」する方法がわかりません。

4

1 に答える 1

5

RxCpp と RxJava では、.subscribe() がサブスクライバーを受け取ります。サブスクライバーは、サブスクリプションとオブザーバーが結合されたものです。

RxCpp では、例は次のようになります。

std::shared_ptr<std::list<rxcpp::subscriber<int>>> observers(new std::list<rxcpp::subscriber<int>>());

auto observable = rxcpp::observable<>::create<int>([=](rxcpp::subscriber<int> out){
    auto it = observers->insert(observers->end(), out);
    it->add([=](){
        observers->erase(it);
    });
});

注:rxcpp::subscriber<int>オブザーバーの型を隠す type-forgetter です。これにより、コレクションに格納できますが、on_next、on_error、および on_completed の仮想関数が導入されます。

于 2015-04-23T16:41:22.357 に答える