2017-06-22 58 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回答。