c – 在索引处分配boost :: mpl vector_c元素的惯用方法

c – 在索引处分配boost :: mpl vector_c元素的惯用方法,第1张

概述我有 mpl::vector_c<int, 0, 1, 2, 3, 4, 5> 我想在3号位’分配’元素,说我想把它设置为30.因此,我必须写 元函数取和索引,向量和新值并返回修改后的序列. 我最终得到了以下解决方案 template <int k, class sequence, class value>class assign_element{ typedef ty 我有

mpl::vector_c<int,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,5> sequence;typedef typename assign_element<3,sequence,mpl::int_<30> >::type result;

这个解决方案有效,但你可以看到它非常复杂(涉及迭代器,提前……).
这个用例有一个更简单,可能有效的解决方案吗?提前致谢!

解决方法 我从未使用过MPL,但它看起来很有趣,我看一下doc.在这里我的3个答案,我希望这可以帮助你:

1)错误的答案 – 但是找到合适的答案可能是一个良好的开端.你考虑使用replace_if吗?

typedef vector_c<int,5> sequence;typedef replace_if< numbers,equal_to<_,int_<3> >,int_<30> >::type result;

你需要一个at_pos< 3>谓语.我没有找到这样的,

2)你回答是正确的.你封装了它 – 所以使用是一行.在谈论简易性时,使用很重要 – 而不是实现,考虑花一些力气从使用行中删除这个烦人的类型名称.也许你的assign_element<>应来自mpl :: insert<>?或者考虑以C 11方式使用“使用”来删除typedef …

3)我会建议最后一个答案:要求MPL作者添加一个名为replace_at的东西……

HTH,Piotr Nycz

总结

以上是内存溢出为你收集整理的c – 在索引处分配boost :: mpl vector_c元素的惯用方法全部内容,希望文章能够帮你解决c – 在索引处分配boost :: mpl vector_c元素的惯用方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1230315.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存