【问题标题】:Using boost mpl pop_front使用 boost mpl pop_front
【发布时间】:2011-10-29 12:14:03
【问题描述】:

有:

#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::vector&lt;&gt;,你可以把它当作一个,那么有什么区别呢?
  • @ildjarn 只是好奇,好奇没什么不好?
  • 绝对不是! :-] 我只是想知道这给你带来了什么实际问题。

标签: c++ boost boost-mpl


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-14
      • 1970-01-01
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多