从 MPL::Map 生成键的 MPL::Vector<>



谁能告诉我为什么下面的断言失败?

奎西顿 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。

> mpl::vector更像是 C++11 之前时代的便利类型。mpl::push_back运算不返回这样的向量,而是返回一个无需可变参数模板即可增长的序列。

这个小测试程序演示了返回的内容。

详细的解释可以在这个答案中找到。

相关内容

最新更新