Boost.Graph - имея 2 простых класса и один класс - тип данных, как создать граф? - PullRequest
0 голосов
/ 21 апреля 2011

Итак, у меня есть некоторый простой класс генератора, который очень похож это тип данных, такой как это (указатель и длина) и простой рендерер типов данных костюма, такой как этот, Как создать график, который помог бы мне передать сгенерированные данные в мой рендерер?

В настоящее время я делаю что-то вроде этого, чтобы передать свой Char Ptr в генератор данных, а затем результат для рендерера:

     renderer->renderCastedData(producer->updateData(CharPtr));

Но я хотел бы посмотреть, возможно ли использовать Boost Graph для отображения данных, представляющих класс, в некоторые классы в качестве входных данных для некоторых функций и возврата этих функций в некоторые другие классы? Как правило, имея «График», я хочу быть способным вызывать Graph(MyInstanceOfMyDatatype), и у меня есть повышение, передающее мое значение (с минимальным копированием) из одного элемента графика в другой?

Это довольно простой пример, поэтому может показаться, что график является излишним, но я хочу иметь график для автоматической передачи значений между моими классами в случае, например, наличия одного генератора и N средств визуализации - здесь я хочу, чтобы график помог мне в пример предоставления N-1 копий моего класса всем визуализаторам, кроме первого.

1 Ответ

1 голос
/ 26 апреля 2011

Кажется, что вам нужна структура, которая позволяет вам расширить простой шаблон производитель-потребитель в сеть потребителей, одновременно питаемых одним производителем.

Это не то, что обеспечивает Boost.Graph. Boost.Graph - это набор абстрактных процедур (алгоритмов), определенных на множестве понятий графа. Предполагается, что у вас уже есть структура данных, которая имеет свойства графа (главным образом, вершины и ребра и итераторы над ними), и позволяет применять к нему его алгоритмы (максимальный поток, кратчайшее расстояние и т. Д.). Кроме того, он поставляется с некоторыми простыми моделями графов (матрица / список смежности) на случай, если у вас еще нет классов графов.

Ваш вариант использования похож на команду Unix tee. Хотя я не знаю реализацию тройника для конкретной библиотеки, которую вы используете, обычно не слишком сложно реализовать TeeConsumer, который действует как производитель для всех зарегистрированных дочерних потребителей.

Вот сообщение в блоге моего коллеги о реализации устройства тройника для QIODevice Qt, которое может помочь вам начать работу.

...