拥有:
#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;
如何在没有第一个元素的情况下返回向量?
答案 0 :(得分:1)
也许mpl :: equal可以帮助你澄清为什么这根本不重要。
确保它是相同的,但不一定相同。
BOOST_MPL_ASSERT((mpl::equal<
typename pop_front<v>::type,
mpl::vector<short,int,long,long long>
>));
这就是你真正需要的; - )
答案 1 :(得分:0)
我不确定使用MPL功能是否可行。即使您尝试使用poped
和vector
将copy
复制到back_inserter
,您也会再次获得一个不是vector
的类型。这是设计的:就像在Boost.Fusion中一样,MPL的算法和元函数返回原始序列的视图,提供惰性评估。这些视图可以像原始序列一样使用,因此您不必担心它们的实际类型是什么,只需将它们用作vector
(或list
s或map
s等等。)。