Повысить графическую рекурсивную проблему шаблона - PullRequest
0 голосов
/ 21 июня 2011

Привет, у меня есть график повышения, как:

struct Vertex;
struct Edge;



typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Vertex, Edge> Graph_t;


struct Vertex {
};

struct Edge {
    typedef std::vector<Graph_t::vertex_descriptor> intermediate_vertices_t;
    intermediate_vertices_t intermediate_vertices;
};

Проблема с рекурсивным шаблоном в классе Edge. Мне нужно хранить вектор вершин.

Ответы [ 3 ]

2 голосов
/ 18 мая 2012

Вы можете использовать adjacency_list_traits, чтобы обойти эту проблему.Этот класс предоставляет пользователю доступ к типам дескрипторов вершин и ребер, не требуя от пользователя предоставления типов свойств для графа.

struct Vertex {
};

typedef boost::adjacency_list_traits<boost::vecS, boost::vecS, boost::bidirectionalS>::vertex_descriptor VertexDescriptor;
struct Edge {
    typedef std::vector<VertexDescriptor> intermediate_vertices_t;
    intermediate_vertices_t intermediate_vertices;
};
typedef boost::adjacency_list<boost::vecS, boost::vecS, boost::bidirectionalS, Vertex, Edge> Graph_t;
0 голосов
/ 05 июля 2011

Я использовал маленький класс-обёртку, например:

typedef Graph_t::vertex_descriptor vd_t;                           

struct iVertexWrap{                                                
    iVertexWrap(vd_t v) : v(v)
    {}                                                             
    vd_t v;
};

, объявив его перед классом Edge

0 голосов
/ 28 июня 2011

Попробуйте использовать adjacency_list:

http://www.boost.org/doc/libs/1_36_0/libs/graph/doc/adjacency_list.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...