使用 boost mpl pop_front
有:
#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<短,整数,长,长长>但是: boost::mpl::v_mask<升压::mpl::向量<字符,短,整数,长,长长>>
我该如何让它返回没有第一个元素的向量?
Having:
#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;
}
the problem is that poped is not equal to boost::mpl::vector< short,int,long,long long > but to: boost::mpl::v_mask< boost::mpl::vector< char,short,int,long,long long>>
How shall I make it to return vector without first element?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
也许 mpl::equal 可以帮助您澄清为什么这根本不重要。
只要确保它相等,但不一定相同。
这就是您真正需要的;-)
Maybe mpl::equal can help you clarify why this doesn't really matter at all.
Just make sure it's equal, but not necessarily the same.
That is all you really need ;-)
我不确定使用 MPL 功能是否可以实现这一点。即使您尝试使用
copy
和back_inserter
将poped
复制到vector
中,您也会再次获得一个类型这并不是真正的向量
。这是设计使然:就像在 Boost.Fusion 中一样,MPL 的算法和元函数返回原始序列的视图,提供惰性评估。这些视图可以像原始序列一样使用,因此您不必担心它们的实际类型是什么,只需将它们当作向量
(或列表
,或地图
等)。I am not sure this is possible using MPL features. Even if you tried copying
poped
into avector
usingcopy
and aback_inserter
, you would once again obtain a type which is not really avector
. This is by design: like in Boost.Fusion, MPL's algorithms and metafunctions return views over the original sequence, providing lazy evaluation. These views can be used like the original sequences, so you should not worry about what their actual types are and simply use them as if they werevector
(orlist
s, ormap
s, etc.).