2012-04-16 201 views
2

如何添加數字?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; 

回答

2

編輯:我錯了,你可以直接使用mpl::plus,使用placeholder expressions。這簡化了整個符號:

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;