2017-06-22 30 views
0

任何人都可以告訴我爲什麼斷言失敗?從mpl :: map生成mpl :: vector <>

quesiton 1:

typedef mpl::map<mpl::pair<int, unsigned>, mpl::pair<char, unsigned char> > m; 
    typedef mpl::fold<m, mpl::vector<>, mpl::push_back<mpl::_1, mpl::first<mpl::_2>>>::type keys; 
    BOOST_STATIC_ASSERT((std::is_same<boost::mpl::vector<int, char>, keys>::value == 1)); 

問題2:如果 我想寫一個摺疊功能產品的指針,映射的鍵的MPL :: vector的,我應該怎麼寫呢?

template <typename T> 
pointer_type { 
    typedef T* pointer_type; 
} 
     typedef mpl::fold<m, mpl::vector<>, mpl::push_back<mpl::_1, pointer_type<mpl::first<mpl::_2>>>::type>::pointer_type 
> keys; 

似乎不工作。 mpl :: _ 2永遠不會被評估。

回答

1

mpl::vector更適合於Pre C++ 11時代。 mpl::push_back操作不返回這樣一個向量,而是一個可以在不需要可變參數模板的情況下增長的序列。

This小測試程序演示返回的內容。

詳細解釋請參見this回答。