Ваш вопрос меня немного смущает, но я думаю, вы ищете что-то вроде этого:
// console was chosen just to make the example simple, but
// it can be more generic easily
template <typename vertex_t>
class ConsolePrinter {
public:
template <typename iter_t>
void print(iter_t vbegin, iter_t vend) const {
copy(vbegin, vend, std::ostream_iterator<vertex_t>(std::cout, "\r\n"));
}
};
Тогда, следуя приведенному вами примеру, вы получите что-то вроде этого:
typedef Graph<VertexProperties, EdgeProperties> MyGraph;
MyGraph g;
MyGraph::vertex_range_t vertices_range = g.getVertices();
ConsolePrinter<MyGraph::Vertex> printer;
printer.print(vertices_range.first,vertices_range.second);
Как уже говорил Конрад и другие в этой теме, у вас нет проблем с доступом к итератору и другим определениям типов из этого класса, и вы можете сделать свое решение очень универсальным. Кстати, решение для печати, которое вы выберете, налагает определенные ожидания (в моем случае, тип вершины должен работать с operator<<
из ostream
), но это может быть сделано без потери общего аспекта решения.