C++ 使用boost mpl pop_front
具有:C++ 使用boost mpl pop_front,c++,boost,boost-mpl,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; } #
#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;
}
#包括
#包括
#包括
int main()
{
typedef boost::mpl::vector v;
typedef typename pop_front::type poped;
}
问题是poped不等于boost::mpl::vector如何在没有第一个元素的情况下返回向量?我不确定使用MPL功能是否可行。即使您尝试使用
copy
和back\u inserter
将popped
复制到向量
,您也会再次获得一个不是真正的向量
的类型。这是通过设计实现的:与Boost.Fusion一样,MPL的算法和元函数返回原始序列的视图,提供延迟评估。这些视图可以像原始序列一样使用,因此您不必担心它们的实际类型,只需将它们当作vector
(或list
s,或map
s等)来使用即可。也许mpl::equal可以帮助您澄清为什么这一点都不重要
只要确保它是相等的,但不一定相同
BOOST_MPL_ASSERT((mpl::equal<
typename pop_front<v>::type,
mpl::vector<short,int,long,long long>
>));
BOOST\u MPL\u ASSERT((MPL::equal)<
typename pop_front::type,
向量
>));
这就是你真正需要的;-) 你为什么关心结果的确切类型是什么?它的行为就像一个
mpl::vector
,你可以把它当作一个,那么有什么区别呢?@ildjarn只是好奇,好奇没什么不好的,是吗?绝对不是!:-]我只是想知道这到底给你带来了什么问题。