如何在C ++中正确地进行循环类型定义?

时间:2016-04-21 16:23:38

标签: c++ recursion

我正在尝试实现一个在链表中存储邻居的无向图。因为稍后将删除边缘,我还需要将迭代器存储到相对边缘以允许同步删除。

这就是循环的来源。基本上,我想做的事情如下:

typedef std::list<Edge> Node;
typedef std::pair<Node*,Node::iterator> Edge;

Obviously这不起作用。我可以以某种方式滥用继承来打破循环吗?这个普遍适用于所有编译器吗?

struct Edge;
typedef std::list<Edge> Node;
struct Edge:public std::pair<Node*,Node::iterator>{using pair::pair;};

此外,C ++的惯用方法是什么?

1 个答案:

答案 0 :(得分:0)

是的,您需要转发声明某些东西进行循环引用(仍然不可能循环包含)

一种惯用的方式是为Edge的成员提供比firstsecond更好的名称。

struct Edge
{
    Node * destination;
    Node::iterator dual;
};