谁能告诉我为什么下面的断言失败?
奎西顿 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
运算不返回这样的向量,而是返回一个无需可变参数模板即可增长的序列。
这个小测试程序演示了返回的内容。
详细的解释可以在这个答案中找到。