Fusion是否具有拖尾功能?

时间:2019-06-20 23:57:09

标签: c++ c++11 boost-fusion

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

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 );

1 个答案:

答案 0 :(得分:1)

Boost Fusion的文档中,算法下有一个称为 Transformation 的部分。这里列出的Functions特别包括一个称为pop_frontstd::list::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 ++标准库,用于删除集合中的第一个元素,例如{{3}}。 Boost Fusion选择此名称是为了与标准库“更一致”。