融合有尾部功能吗?

Does Fusion have a tail function?

本文关键字:功能 尾部 融合      更新时间:2023-10-16

我需要一个类似尾巴的功能,可以像这样使用:

boost::fusion::vector<char, int, float> a('a', 12, 5.5f);
boost::fusion::vector<int, float> b(12, 5.5f);
boost::fusion::copy( Tail(a), b );

在 Boost Fusion 的文档中,算法下有一个名为"转换">的部分。此处列出的函数特别包括一个名为 pop_front函数。这似乎完全符合我们的需求:

返回一个新序列,删除原始序列的第一个元素。
...

assert(pop_front(make_vector(1,2,3)) == make_vector(2,3));

对于您的示例:

boost::fusion::vector<char, int, float> a('a', 12, 5.5f);
boost::fusion::vector<int, float> b(12, 5.5f);
boost::fusion::copy( boost::fusion::pop_front(a), b );

名称pop_front有点奇怪,因为它实际上并没有修改输入序列,而是返回修改后的结果。但是,pop_front来自C++标准库,它用于删除集合的第一个元素,例如 std::list::pop_front .Boost Fusion选择这个名称是为了与标准库"更一致"。