0

有:

#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< short,int,long,long long > 而是: boost::mpl::v_mask< boost::mpl::vector< char,short,int长长长长>>

我该如何让它返回没有第一个元素的向量?

4

2 回答 2

1

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

只要确保它相等,但不一定相同。

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

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

于 2013-10-12T00:04:52.457 回答
0

我不确定这是否可以使用 MPL 功能。即使您尝试复制popedvectorusingcopy和 aback_inserter中,您也会再次获得一个不是真正 a 的类型vector。这是设计使然:就像在 Boost.Fusion 中一样,MPL 的算法和元函数返回原始序列的视图,提供惰性求值。这些视图可以像原始序列一样使用,因此您不必担心它们的实际类型是什么,只需像使用它们vector(或lists,或maps 等)一样使用它们。

于 2011-11-24T15:58:42.077 回答