【发布时间】:2012-06-15 09:54:03
【问题描述】:
我有
mpl::vector_c<int, 0, 1, 2, 3, 4, 5>
我想“分配”位置 3 的元素,比如我想将其设置为 30。因此,我必须写 一个元函数获取和索引,向量和新值并返回修改后的序列。 我最终得到了以下解决方案
template <int k, class sequence, class value>
class assign_element
{
typedef typename mpl::begin<sequence>::type begin;
typedef typename mpl::advance<begin, mpl::int_<k> >::type pos;
typedef typename mpl::erase <sequence, pos>::type sequence2;
typedef typename mpl::begin<sequence2>::type begin2;
typedef typename mpl::advance<begin2, mpl::int_<k> >::type pos2;
public:
typedef typename mpl::insert <sequence2, pos2, value>::type type;
};
然后我按如下方式使用它
typedef mpl::vector_c<int, 0, 1, 2, 3, 4, 5> sequence;
typedef typename assign_element<3, sequence, mpl::int_<30> >::type result;
此解决方案有效,但正如您所见,它非常复杂(涉及迭代器、高级...)。 这个用例是否存在更简单且可能有效的解决方案?提前致谢!
【问题讨论】:
标签: c++ metaprogramming boost-mpl