boost mpl积分型积累

时间:2012-04-16 09:04:38

标签: c++ boost boost-mpl

如何添加数字?

typedef boost::mpl::vector<
    boost::mpl::int_<1>, boost::mpl::int_<2>,
    boost::mpl::int_<3>, boost::mpl::int_<4>,
    boost::mpl::int_<5>, boost::mpl::int_<6> > ints;
typedef boost::mpl::accumulate<ints, boost::mpl::int_<0>, ????? >::type sum;

1 个答案:

答案 0 :(得分:3)

编辑:我错了,您可以使用placeholder expressions直接使用mpl::plus。这简化了整个表示法:

typedef mpl::accumulate<ints, mpl::int_<0>, mpl::plus<mpl::_1, mpl::_2>  >::type sum;

当然也可以使用metafunction class获得相同的效果(添加是一种矫枉过正,但对于更复杂的事情可能是合理的):

struct plus_mpl
{
    template <class T1, class T2>
    struct apply
    {
       typedef typename mpl::plus<T1,T2>::type type;
    };
};

typedef mpl::accumulate<ints, mpl::int_<0>, plus_mpl >::type sum;