Я провел весь день, исследуя эту тему, так что с некоторыми разбросанными знаниями по теме я пришел к вам с этим запросом.Пожалуйста, позвольте мне описать то, что я пытаюсь выполнить, и, возможно, вы можете предложить решение ближайшего вопроса или другой способ решения проблемы полностью.
Я пытаюсь имитировать что-то, связанное с тем, как *Файлы 1003 * XAML работают в WPF , где вы по существу создаете экземпляр дерева объектов из определения XML.Если это неправильно, пожалуйста, сообщите.В остальном эта проблема не связана с WPF , C # или чем-либо управляемым - я упоминаю об этом только потому, что это похожая концепция ..
Итак, я создалкласс синтаксического анализатора XML и сгенерированное дерево узлов на основе объектов ObjectNode . ObjectNode объекты содержат строковое значение с именем type , и у них есть std :: vector дочерних ObjectNode объектов.
Следующим шагом является создание экземпляра дерева объектов на основе данных в дереве ObjectNode .Это промежуточное дерево ObjectNode необходимо, потому что одно и то же дерево ObjectNode может быть создано несколько раз или отложено по мере необходимости.Дерево объектов, которое создается, таково, что узлы в дереве являются потомками общего базового класса, который на данный момент мы можем назвать MyBase .Листовые узлы могут быть любого типа, необязательно производными от MyBase .
Чтобы сделать это более сложным, я не буду знать, какие типы объектов могут быть задействованы в дереве, поэтому мне нужночтобы разрешить регистрацию новых типов на заводе.
Я знаю о заводе Boost.У их документов есть интересный маленький абзац дизайна на этой странице:
o Мы можем захотеть фабрику, которая принимает некоторые аргументы, которые передаются конструктору,
o мы будемвероятно, нам нужно использовать умные указатели,
o нам может потребоваться несколько функций-членов для создания объектов различного типа,
o нам может не потребоваться полиморфный базовый класс для объектов,
o, как мы увидим,нам вообще не нужен базовый класс фабрики,
o нам может потребоваться просто вызвать конструктор - без # new # для создания объекта в стеке и
o наконец, мы можем захотеть использовать настраиваемое управление памятью.
Возможно, я не все правильно понимаю, но, похоже, это говорит о том, что то, что я пытаюсь сделать, может быть достигнуто с помощью Boost.Но все примеры, которые я нашел, похоже, описывают фабрики, где все объекты получены из базового типа.
Будем весьма благодарны за любые рекомендации по этому вопросу.
Спасибо за ваше время!