c – 如何定义递归类型?

我想要一个列表。列表中的一个条目将存储值和迭代器到列表中的另一个条目。如何定义此类型?这将是这样的,但在语法上是正确的。

typedef list<pair<int, MyList::const_iterator>> MyList;
让我们用一些用户定义的类型将内部的问题解决掉,以打破声明的递归:

struct Node {
    int _value;
    std::list<Node>::const_iterator _next;
};

如果你想使用typedef,那么你可以:

struct Node;
typedef std::list<Node> NodeList;

struct Node {
    int _value;
    NodeList::const_iterator _next;
};

编辑:作为T.C.提醒我,实例化不完整类型的标准容器可能是未定义行为(一些标准库实现确保不是)。所以,让我们把它推迟一下。

编辑:那也没有帮助。所以,验证你的std :: list实现是否支持不完整的类型(或者信任它,这样做通常是诚实的),或使用Boost :: containers。

template <class = void>
struct Node_ {
    int _value;
    typename std::list<Node_>::const_iterator _next;
};

typedef Node_<> Node;
http://stackoverflow.com/questions/25563661/how-to-define-a-recursive-type

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:c – 如何定义递归类型?