【问题标题】:recursive tuple -- list using tuples instead of structs递归元组——使用元组而不是结构进行列表
【发布时间】:2014-08-06 21:14:44
【问题描述】:

是否可以将元组列出来?

typedef std::tuple<int,node*> node;

运行时等效项是:

struct node {
  int i; 
  node* next
};

更新(1)

因为我受到了很多批评。我将扩展这个问题。最初我只是想保持简单。

(1) 我更喜欢使用元组而不是结构。原因之一是我将 boost fusion 用于 io、算法和元编程。结构没有那个。有关元组或等效 boost::fusion::vector 的更多信息,请参阅http://www.boost.org/doc/libs/1_55_0/libs/fusion/doc/html/fusion/quick_start.html

(2) 具体来说,我使用了许多类似于这个的结构:

struct SLseg{
    int      edge;         
    Point    lP;           
    Point    rP;          
    SLseg*   above;         
    SLseg*   below;        
};

我不想为它们中的每一个写operator&lt;&lt; 或使用继承。 boost::fusion's iopretty-print 提供了输出结构的设施,因为它们是元组;即使元组中有 stl 容器。

(3) 列表只是一个简单的例子。考虑使用enable_if 和一些融合/ mpl 算法确定类型的异构列表。

【问题讨论】:

  • 嗯...是吗? std::vector&lt;std::tuple&lt;int, node*&gt; &gt;?
  • 我确定我误解了这个问题。那么您能否详细说明/澄清一下?
  • 还有,这和boostrecursion有什么关系?
  • @Jashaszun 我认为问题在于node 尚未在std::tuple&lt;int,node*&gt; 的范围内,因此您不能使用node * 作为模板参数...
  • 构造的意义何在?它与“运行时等效”相同,两种布局都可以在编译时使用。

标签: c++ tuples


【解决方案1】:

虽然不是真正的解决方案,但您仍然可以使用 FUSION_ADAPT_STRUCTstruct 转换为 Fusion 序列。另请注意this question,它展示了如何将 IO 与这种经过调整的结构正确集成。

【讨论】:

    猜你喜欢
    • 2012-01-12
    • 1970-01-01
    • 2015-12-03
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-03
    • 2013-09-26
    相关资源
    最近更新 更多