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