我是BGL的新手。
我试图沿着以下几行表示类型层次结构:
Number : terminal(double)
String : terminal(std::string)
Vec2
x : Number
y : Number
Circle
position : Vec2
radius : Number
我正在使用以下代码:
struct Descriptor { std::string name; };
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::undirectedS, Descriptor, Descriptor> Graph;
static inline void addVertex(Graph& g, const std::string& name)
{
Graph::vertex_descriptor d = boost::add_vertex( g );
g[ d ].name = name;
}
static inline void addEdge(Graph& g, const std::string& name, Index source, Index target)
{
std::pair<Graph::edge_descriptor, bool> d = boost::add_edge( source, target, g );
g[ d.first ].name = name;
}
...认为Vertex属性将识别“类型名称”(Number,String,Vec2和Circle)和Edge属性将识别化合物的“成员名称”(x,y,位置和半径)类型的组件。
我遇到的概念性问题是Vertex(例如Vec2)可以有两个具有相同类型的成员。在这样的模型中,可以为Vec2创建单独的边 - &gt;数字(x)和Vec2 - &gt;号(Y)?这是正确的方法吗?
最终,我希望能够遍历图形,这样如果我们从Circle开始,我们将访问(按顺序):position.x,position.y,radius。
感谢您的帮助!