生成mpl :: vector<>来自mpl :: map的键

时间:2017-06-22 14:16:44

标签: templates boost template-meta-programming

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

问题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 个答案:

答案 0 :(得分:1)

$fh1 = fopen('languages.txt', 'r'); echo(read($fh1, 7)); // 'AJAX HT' $fh2 = fh1; echo(read($fh2, 4)); // 'ML C' echo(read($fh1, 3)); // 'SS ' $fh3 = $fh2; echo(read($fh3, 6)); // 'JQUERY' 更像是C + 11之前的便利类型。 mpl::vector操作不返回这样的向量,而是返回可以增长而不需要可变参数模板的序列。

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

详细解释可在this答案中找到。