2016-02-24 114 views
0

我試圖用某個容器包裝mpl::set中的每個元素,例如std::vector,儘管實際類型並不重要。我將如何做到這一點?基本上,我想從這個boost mpl將每個元素包裝在一個集合中

using mySet = mpl::set<int, float, double>; 

去這個

using myNewSet = mpl::set<container<int>, container<float>, container<double>>; 

我認爲做類似mpl::insert一類的,但是因爲我想該解決方案是通用它以某種方式存儲container類型在其本身內部,其與mpl::fold的參數類型不能很好地發揮作用。

回答

1

經過一番更多搜尋,這似乎很好地工作:

using myNewSet = mpl::fold< 
    mySet, 
    mpl::set0<>, 
    mpl::insert<mpl::_1, container<mpl::_2> 
>::type; 
+0

你也應該可以使用[變換](http://www.boost.org/doc/libs/1_60_0/libs/ MPL/DOC/refmanual/transform.html)。 'mpl :: transform >' – brunocodutra

+0

這似乎不起作用,因爲標準容器不提供typedef類型定義。 – user975989

+2

它應該繼續工作,注意'mpl :: transform'在內部調用'mpl :: lambda',然後調用'mpl :: quote',後者又隱式地定義了一個嵌套的':: type'來引用類型本身,不應定義嵌套的':: type'。 但是,由於一個不相關的問題,似乎無法轉換'mpl :: set's:它在內部顯示變換調用'mpl :: push_front',它沒有爲'mpl :: set'定義。事實上[適用於'mpl :: vector'。](http://melpon.org/wandbox/permlink/IeRGwrELRRItQLLU) – brunocodutra

相關問題