2017-02-26 114 views
2

我在C#中使用RX進行編程,現在我想用C++中的rxcpp進行編程。 我正在嘗試做最簡單的事情,定義一個類成員變量observable<int>
問題是,observable被定義爲:rxcpp簡單可觀察<int>

template<class T, class SourceOperator> 
class observable 

什麼是SourceOperator
如何定義簡單的observable<int>

當尋找的代碼,在RX-observable.hpp(線101):

template<class T, class Source> 
observable<T> make_observable_dynamic(Source&& s) { 
    return observable<T>(dynamic_observable<T>(std::forward<Source>(s))); 
} 

我發現observale<T>作爲返回類型,但無法找到它的定義。
這太奇怪了。我雖然老實說我在C++ 11 \ 14 &元編程......顯然兔子洞可以得到:-(

更新1更深的相當精通:
observale<T>已經發現:-) 其in rx-predef.hpp:

template<class T = void, 
     class SourceObservable = typename std::conditional<std::is_same<T,void>::value, 
      void, 
      dynamic_observable<T>>::type> 
class observable; 

ok我當前的猜測是dynamic_observable意味着「常規」observable<T>是一個動態的,類型爲T的流。這是合乎邏輯的,因爲您只能將類型擦除的流作爲具有顯式類型的變量來記錄。
什麼使我想到我的下一個猜測,即template<class T, class SourceOperator> class observable的語法使得能夠在'decorator' pattern(編譯時間修飾)中創建與其他可觀察結合的可觀察類型。類似例舉here

+0

這很奇怪。 [github](https://github.com/Reactive-Extensions/RxCpp)頁面上的示例定義了幾個變量,但沒有指定'SourceOperator':'observable '和'observable '。 – Rakete1111

+0

這個東西的文檔真的很糟糕。 http://reactive-extensions.github.io/RxCpp/classrxcpp_1_1observable.html#details在整個地方使用'SourceOperator'而不解釋它的含義。絕對不是我在私人玩具項目之外使用的東西。 –

+1

是的,更新1是正確的!在C++中,默認情況下讓編譯器看到完整的靜態類型並將所有操作符合並在一起以獲得性能。 SourceOperator是泛型observable類型所持有的observable的完整類型。 observable上的as_dynamic()方法將返回可擦除類型的可觀察值,這將強制虛擬函數調用開銷和缺省避免的堆分配開銷。 –

回答

0

observale<T>已經發現:-) 其在RX-predef.hpp:

template<class T = void, 
     class SourceObservable = typename std::conditional<std::is_same<T,void>::value, 
      void, 
      dynamic_observable<T>>::type> 
class observable; 

dynamic_observableobservable<T>是T. 的動態的,類型ereased流它的邏輯,因爲只能將類型擦除的流作爲具有顯式類型的變量來記錄。
template<class T, class SourceOperator> class observable的語法允許在'decorator' pattern(編譯時間裝飾)中從其他可觀察值組合的可觀察類型的組合創建。例如here