Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Templates 生成mpl::vector<&燃气轮机;mpl::map中的密钥数_Templates_Boost_Template Meta Programming - Fatal编程技术网

Templates 生成mpl::vector<&燃气轮机;mpl::map中的密钥数

Templates 生成mpl::vector<&燃气轮机;mpl::map中的密钥数,templates,boost,template-meta-programming,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; BOO

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

问题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));
typedefmpl::map m;
typedefmpl::fold::type键;
BOOST_STATIC_ASSERT((std::is_same::value==1));
问题2: 如果我想编写一个fold函数来生成指向映射键的指针的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; 
模板
指针类型{
typedef T*指针类型;
}
typedef mpl::fold::指针类型
>钥匙;

似乎不起作用。mpl::_2永远不会被评估

mpl::vector是前C++11时代的一种更方便的类型。
mpl::push_back
操作不会返回这样的向量,而是返回一个序列,该序列可以在不需要可变模板的情况下增长

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

答案中有详细的解释