У меня есть дерево объектов, которые представляют собой 3D-модель (граф сцены). Узлы дерева имеют разные типы (реализованы как производные классы из общего базового класса). Например, есть узел, представляющий многоугольник, или узел, который применяет преобразование координат (поворот, перевод) к своим дочерним узлам. Также необходимо, чтобы сторонние поставщики должны были иметь возможность внедрять новые типы узлов и добавлять их плагином (я использую Qt как инфраструктуру графического интерфейса). Поэтому возможно, что в дереве могут быть узлы, из которых тип неизвестен при компиляции.реализация шаблона MVC на графике сцены C++
Теперь я хочу реализовать класс, который выступает в качестве представления для этого графика сцены. Для каждого типа узла дерева вид должен принимать соответствующие действия (рисовать многоугольник, преобразовывать и т. Д.). Моя идея - реализовать классы представления для каждого типа узлов и позволить классу класса верхнего уровня делегировать эти классы в зависимости от типа узла. (Сторонние поставщики смогут реализовать собственные классы делегатов представления)
Итак, мой вопрос: как я могу определить тип узла в исполнении и расширяемый?
Мои идеи до сих пор:
Я мог бы добавить идентификатор типа для каждого класса узла. Это может быть просто целым числом (строки не подходят для повышения производительности). Проблема заключается в управлении идентификаторами типов для сторонних поставщиков. Как я могу убедиться, что один и тот же идентификатор не используется для разных типов узлов (например, разными поставщиками)?
Я мог бы реализовать код чертежа или хотя бы вызов соответствующего объекта делегирования чертежа непосредственно в узле. Но мои объекты-узлы предпочтительно не должны знать что-то о своих объектах представления. Также невозможно дать каждому узлу объект выделенный объект представления (речь идет о десятках тысяч узлов).
Итак, каковы ваши идеи? Возможно, это совершенно другой способ справиться с этим? Помните: решение не должно требовать поиска хеш-таблиц или других алгоритмов с интенсивным вычислением, потому что мне нужно рисовать график в реальном времени.
Спасибо заранее, McNumber граф
Спасибо за ответ! В какой-то игре это было бы вполне приемлемо. Но мне нужно разработать приложение 3D-CAD. Дерево используется для хранения всей информации о объектах в настоящее время отредактированной модели. Кроме того, одно и то же дерево используется для моделирования, тестов и т. Д. Наличие разных деревьев для этих задач было бы бессмысленным, потому что они были бы в основном одинаковыми. Я явно хочу отделить модель (возможно, лучшее слово, чем график сцены) и алгоритм рисования. – McNumber 2010-11-26 09:03:15