获取 mpl 向量的前 M 个元素
我有一个带有 N
个元素的 boost::mpl::vector
,比如说:
typedef boost::mpl::vector<int,float,double,short,char> my_vector;
我希望获得一个包含 M
元素的序列代码>我的向量。因此,如果 M
是 2,我想要一个:
typedef boost::mpl::vector<int,float> my_mvector;
最初我想到使用 erase
但无法找出适合 的模板参数第一个
和最后一个
。 (我使用的是 at_c<...>::type
。)但是,据我所知,filter_view
也可以用于该任务。解决这个问题的最佳方法是什么?
I have a boost::mpl::vector
with N
elements, say:
typedef boost::mpl::vector<int,float,double,short,char> my_vector;
I wish to obtain a sequence containing the first M
elements of my_vector
. So if M
is 2 I want out a:
typedef boost::mpl::vector<int,float> my_mvector;
Initially I thought of using erase<s,first,last>
but was unable to figure out suitable template parameters for first
and last
. (I was using at_c<...>::type
.) However, it is also my understanding that filter_view
can also be used for the task. What is the best way of going about this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
擦除是解决您问题的合理方法。
mpl::begin
的结果,该结果按您有兴趣返回的元素数量增加。mpl::end
的结果下面的代码假设您希望元函数在向量中的元素数量小于请求的号码。还可以使用静态断言来验证输入整数类型是否小于或等于向量的大小。
我提供了采用 MPL 积分常量的
first_n_elements
和仅采用整数的first_n_elements_c
。如果您想使用视图,您还可以在下面的代码中使用
iterator_range<>
以及 begin 和 cut 迭代器。在这种情况下,我不确定其中一种相对于另一种的优势是什么。Erase is a reasonable solution for your problem.
mpl::begin<T>
which is advanced by the number of elements you are interested in returning.mpl::end<T>
The code below assumes that you want the metafunction to return the original type if the number of elements in the vector is less than the requested number. It's also possible to use a static assertion to verify that input integral type is less than or equal to the size of the vector.
I provied both a
first_n_elements
which takes an MPL integral constant andfirst_n_elements_c
which simply takes an integer.You could also use
iterator_range<>
along with the begin and cut iterators in the below code, if you want to use a view. I'm not sure what the advantages are of one over the other in this case.