1

我有一个 Win32 控制台应用程序,并且我已经导入了对 Rx 的引用。Intellisense 允许我这样做......

using namespace System::Reactive;
using namespace System::Reactive::Concurrency;
using namespace System::Reactive::Disposables;
using namespace System::Reactive::Joins;
using namespace System::Reactive::Linq;
using namespace System::Reactive::PlatformServices;
using namespace System::Reactive::Subjects;
using namespace System::Reactive::Threading;
using namespace System::Reactive::Threading;
using namespace System::Data::Linq;
using namespace System::Xml::Linq;

然后我有许多可用的类,例如 ISubject/Subject 和 IObserver/Observer。但是没有 IObservable。我对缺少 Cpp 的 Rx 文档感到有点担心。我是否缺少任何明显的资源?

我尝试过 Channel9、Google、Stackoverflow 和 Facebook 群组。这是我制作的工作 C# 代码,我想让它与 C++ 一起工作。这个函数合并了来自不同观察源的所有数据,并将其作为一个列表输出。

所以矩阵一从源一出现,矩阵二从源二出现。它们通过 id 匹配,并作为列表一起推送。

public static IObservable<IList<TSource>> MergeById<TSource>(this IObservable<TSource> source, Func<IList<TSource>, TSource> mergeFunc, Func<TSource, int> keySelector, int bufferCount)
{
   return Observable.Create<IList<TSource>>(o =>  
   {
     var buffer = new Dictionary<int, IList<TSource>>();
     return source.Subscribe<TSource>(i =>
          { 
             var index = keySelector(i);
             if (buffer.ContainsKey(index))
             {                  
               buffer[index].Add(i);
             }
             else
             {                                     
               buffer.Add(index, new List<TSource>(){i});                
             }
             if (buffer.Count==bufferCount)
             { 
               o.OnNext(mergeFunc(buffer[index]));    
               buffer.Remove(index);                
             }
          });
     });
}

这里的任何帮助都会很好。找不到我想要的某些类,并且语法的其他方面有所不同。是否有任何资料或示例可以显示 C++ 中的工作方式。大概可以从这些推断出来。

这是该问题的原始帖子。

http://social.msdn.microsoft.com/Forums/en-US/58a25f70-a7b8-498b-ad7a-b57f3e1152da/rxcpp?forum=rx

我之前也尝试过在这里问,但没有任何回应。希望这会更有成果,现在我有更多关于我想要实现的目标的信息。

谢谢你。

4

2 回答 2

3

顶级命名空间是 rxcpp,而不是 System。要获得可观察性,您需要:

#include "cpprx/rx.hpp"
using namespace rxcpp;
于 2014-01-28T16:51:00.073 回答
0

I found this which helps a great deal.

But i am unsure who to then using this, to create an extension method. Is that even possible in C++?

http://social.msdn.microsoft.com/Forums/en-US/a500d5de-8c22-4222-829f-09ccd4c7920e/using-rx-from-ccx-metro-app?forum=rx&prof=required

public static IObservable<IList<TSource>> MergeById<TSource>(this IObservable<TSource> source, Func<IList<TSource>, TSource> mergeFunc, Func<TSource, int> keySelector, int bufferCount)
{
   return Observable.Create<IList<TSource>>(o =>  
   {
     var buffer = new Dictionary<int, IList<TSource>>();
     return source.Subscribe<TSource>(i =>
          { 
             var index = keySelector(i);
             if (buffer.ContainsKey(index))
             {                  
               buffer[index].Add(i);
             }
             else
             {                                     
               buffer.Add(index, new List<TSource>(){i});                
             }
             if (buffer.Count==bufferCount)
             { 
               o.OnNext(mergeFunc(buffer[index]));    
               buffer.Remove(index);                
             }
          });
     });
}

The aim is to get two observable sources, which are subjects, into one observable where they are paired together by their id and push together to the OnNext method.

Regards,

Daniel

于 2014-01-28T21:57:20.990 回答