使用boost mpl pop_front

时间:2011-10-29 12:14:03

标签: c++ boost boost-mpl

拥有:

#include <typeinfo>
#include <boost/mpl/vector.hpp>
#include <boost/mpl/pop_front.hpp>
int main()
{
    typedef boost::mpl::vector<char,short,int,long,long long> v;
    typedef typename pop_front<v>::type poped;
}

问题是poped不等于boost :: mpl :: vector&lt; short,int,long,long long&gt;但是:boost :: mpl :: v_mask&lt;升压:: MPL ::矢量&lt; char,short,int,long,long long&gt;&gt;

如何在没有第一个元素的情况下返回向量?

2 个答案:

答案 0 :(得分:1)

也许mpl :: equal可以帮助你澄清为什么这根本不重要。

确保它是相同的,但不一定相同。

BOOST_MPL_ASSERT((mpl::equal<
    typename pop_front<v>::type,
    mpl::vector<short,int,long,long long>
>));

这就是你真正需要的; - )

答案 1 :(得分:0)

我不确定使用MPL功能是否可行。即使您尝试使用popedvectorcopy复制到back_inserter,您也会再次获得一个不是vector的类型。这是设计的:就像在Boost.Fusion中一样,MPL的算法和元函数返回原始序列的视图,提供惰性评估。这些视图可以像原始序列一样使用,因此您不必担心它们的实际类型是什么,只需将它们用作vector(或list s或map s等等。)。