Может кто-нибудь опубликовать пример создания надстройки inv_adjacency_iterator с использованием inv_adjacency_iterator_generator? - PullRequest
1 голос
/ 10 октября 2009

Дано определение:

typedef повышение имени типа :: graph_traits :: adjacency_iterator adjacency_iter;
typedef повышение имени типа :: inv_adjacency_iterator_generator :: type inv_adjacency_iter;

Меня интересует семантика boost :: tie (i, end) = inv_adjacent_vertices ((* start);

Экспресс-смежность работает нормально, где inv_adjacent_vertices завершается ошибкой со следующим:

ошибка C2679: двоичный файл '=': не найден оператор, который принимает правый операнд типа 'const boost :: inv_adjacency_iterator' (или нет приемлемого преобразования) C: \ boost_1_33_1 \ boost \ tuple \ detail \ tuple_basic .hpp 637 домен

Tuple_basic.hpp определяет adjacency_iterator, используя access_traits.

inv_adjacency_iterator определяется с использованием inv_adjacency_iterator_generator ...

1 Ответ

1 голос
/ 15 декабря 2009

Сначала определите итератор в ребре:

typedef typename boost::graph_traits<TGraphContainer>::in_edge_iterator TInEdgeIterator;

Затем используйте итератор InEdge в inv_adjacency_iterator_generator:

typedef typename boost::inv_adjacency_iterator_generator<TGraphContainer, TVertex, TInEdgeIterator>::type TInvAdjacencyIterator;

Наконец, определите диапазон вершин для работы синтаксиса boost :: tie:

typedef std::pair<TInvAdjacencyIterator, TInvAdjacencyIterator> TInvAdjacencyVertexRangeType;
...