如何解决Boost :: BGL模板< - >类循环依赖?

Bas*_*ian 3 c++ templates circular-dependency forward-declaration boost-graph

我在使用Boost图形库的邻接列表时遇到问题.它似乎是一个循环依赖问题:我有一个模板的typedef T使用了一些类A.另外一个存储指向类型为T的对象的指针.现在编译器告诉我,T没有命名一个类型.

以下是我更具体文件的摘录:

//graphdefinitions.hpp
#include "lane.hpp"
#include "tie.hpp"

typedef boost::adjacency_list<boost::listS, boost::listS, 
                              boost::directedS, Tie, Lane> Map;
typedef boost::graph_traits<Map>::edge_descriptor edge_descriptor;

//lane.hpp
#include "graphdefinitions.hpp"
class Lane {
    ...
    edge_descriptor *left, *right;
};

//tie.hpp
//no important includes here
class Tie {
    ...
};
Run Code Online (Sandbox Code Playgroud)

如何解决此依赖/包含顺序问题?

另一个编辑:我只是认为edge_descriptor的类型可能是像int这样的原始类型.这样就解决了这个问题,因为我可以通过普通的int变量替换Lane的edge_descriptors,因此可以删除tie.hpp中包含graphdefinitions.hpp.不幸的是我的想法很疯狂*我必须找到另一个解决方案.Edge_descriptor类型似乎是有原因的......

Jer*_*ock 7

BGL中有一个没有很好记录的traits类,它为adjacency_list图形提供了顶点和边缘描述符类型,而无需知道属性类型.它专为您的用例而设计.查看http://www.boost.org/doc/libs/1_45_0/libs/graph/doc/adjacency_list.html的"相关类型"部分,注意有两个定义vertex_descriptoredge_descriptor; 您可以使用adjacency_list_traits属性包定义中的版本,而不会导致循环定义.