嵌套融合载体 - 如何以扁平化的方式访问序列序列?

时间:2011-08-23 08:54:53

标签: c++ vector metaprogramming boost-mpl boost-fusion

在下面的例子中,Outer包含一个嵌套的fusion :: vector:

struct A { fusion::vector<int, double> sub_elements_; };
struct B { fusion::vector<char *, char *> sub_elements_; };

class Outer { fusion::vector<A, A, B> elements_; };
Outer outer_;

如何以扁平化方式访问Outer?例如,我希望这些是等价的:

 fusion::at_c<0>(fusion::at_c<2>(outer_.elements_).sub_elements_);
 fusion::at_c<4>(outer_);  // Same result; how to make such a flattened access work?
  • 一种方法可能是使用fusion::joint_view;然而,这似乎不是最优的,因为视图为其子序列添加了多余的引用层。
  • 或者,我可以实现我自己的融合序列类型,例如,从示例triple.cpp开始。要做到这一点是相当复杂的。

访问嵌套向量是一项非常通用的任务 - boost :: fusion是否为此提供了一个很好的解决方案?

0 个答案:

没有答案