Есть boost::mpl::vector< ... > с описателями. Описатель это тип, статически описывающий каждый элемент дерева.
Есть два класса
template< class TDescriptorsVector, class TStaticIterator >
class Leaf : public Item { ... };
template< class TVector, class TIterator >
class Container : public Item { ... };
Контейнер может содержать либо другие контейнеры (типа Container< TVector, boost::mpl::next< TIterator >::type > ) либо листья (Leaf< TVector, boost::mpl::next< TIterator >::type >). Причем выбор типа ребенка производится по позиции стат. итератора — если итератор
не указывает на последний элемент вектора, значит ребенок контейнер, иначе лист.
Дети в контейнерах содержатся в std::map< Tag, DeducedChildType >, где Tag — фактически уникальный номер элемента дерева, а DeducedChildType — инстанциация шаблона Container либо Leaf в соответствии с правилом выше.
Item — базовый интерфейс, описывающий общий интерфейс для всех элементов дерева.
И все бы хорошо, но вот не могу никак написать итератор, который бы позволял в run-time переходить на нужный уровень дерева и итерироваться по всем элементам этого уровня возвращая тип Item. Могу написать мета-функцию, которая бы вычислила реальный (или точнее конечный по иерархии) тип элемента по статически заданному уровню, т.е. через указание номера уровня во время компиляции (это фактически сводится к boost::mpl::at< TVector, levelNumeber >::type). Но как работать с такой структурой используя динамическую информацию (т.е. получая тот же номер уровня во время исполнения) ума не приложу.
Для главная проблема состоит в том, что каждый уровень состоит из элементов разного типа (с общим интерфейсом, который однако не позволяет переходить на следующий уровень).
Может кто подскажет в какую сторону рыть?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Спасибо! Это вроде то, что нужно.
Блин, я целый день на это угрохал, а сам так и не допер.
Здравствуйте, anonim_44ax, Вы писали:
_>Спасибо! Это вроде то, что нужно.
_>Блин, я целый день на это угрохал, а сам так и не допер.
Всегда пожалуйста
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском