2014-01-28 1 views
1

У меня есть консольное приложение Win32, и я импортировал ссылки на Rx. Intellisense позволяет мне это сделать ....RxCpp Reactive Extensions в C++

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/Предмет и IObserver/наблюдателя. Однако нет IObservable. Я немного встревожен отсутствием документации для Rx с Cpp. У меня отсутствуют какие-либо очевидные ресурсы?

Я пробовал каналы Channel9, Google, Stackoverflow и Facebook. Это рабочий код C#, который я создал, я бы хотел, чтобы это работало с C++. Эта функция объединяет все данные из разных источников наблюдения и выводит их в виде списка.

Итак, матрица появляется из исходного кода, вторая матрица появляется из второго источника. Они сопоставляются идентификатором и перемещаются вперед вместе в виде списка.

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

Я попытался спросить здесь раньше, но не было никакого ответа. Надеясь, что это будет немного более плодотворным, теперь у меня есть больше информации о том, чего я пытаюсь достичь.

спасибо.

+0

Я не понимаю, как вы получили все эти пространства имен ... как именно вы добавить ссылки на Rx? Я использовал nuget и добавил пакет rxcpp. –

ответ

2

Пространство имен верхнего уровня - rxcpp, а не System. Чтобы получить заметную информацию, вам понадобятся:

#include "cpprx/rx.hpp" 
using namespace rxcpp; 
+0

Yup, теперь это включено, и он отлично работает. Хотя, теперь мне нужно построить метод расширения наблюдаемых событий. – WebSight

0

Я нашел это, что очень помогает.

Но я не уверен, кто затем использовал это, чтобы создать метод расширения. Это возможно даже в 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);     
      } 
      }); 
    }); 
} 

Цель состоит в том, чтобы получить два наблюдаемых источников, которые являются субъектами, в одном наблюдаемом где они спарены вместе по их идентификатору и сталкивать методу OnNext.

С уважением,

Daniel

+0

В C++ нет методов расширения ... просто используйте свободную функцию. –

 Смежные вопросы

  • Нет связанных вопросов^_^