Я возвращаюсь в C++ после перерыва в течение десятилетия и обнаружил, что многое происходит, когда меня нет, и я думаю, что мне не хватает чего-то фундаментального в современном рамки.Перегрузка возвращаемого класса (например, документ DomParser's в xmlpp)
У меня есть документ. Это мой документ. Это xml-документ, но с дополнительными функциями, поэтому с точки зрения дизайна он должен быть получен из xmlpp :: Document.
Однако он загружается из источника, что означает переход через xmlpp :: DomParser, который возвращает базовый объект xmlpp :: Document - не то, что я хочу.
Основной актер не собирается этого делать из-за дополнительных данных, которые содержит мой класс. Я не хочу просто хранить документ как свойство своего собственного класса, потому что есть много обстоятельств, когда я имею дело с ним напрямую.
Я мог бы, в худшем случае, импортировать корневой узел в свой собственный объект, но это похоже на перебор, и я чувствую, что мне не хватает чего-то фундаментального здесь. Есть ли что-то в рамках, которое я пропускаю?
Спасибо.
Спасибо, но еще раз, это копирование результатов.В этом конкретном случае я, вероятно, сделаю это и подумаю о документе парсера как фрагменте документа (последующие фрагменты должны быть обработаны и объединены в любом случае), но я все время вижу проблески более элегантного решения. Возможно, мне нужно проанализировать источник GtkBuilder :: get_widget_derived. Я пытаюсь правильно изучить структуру и не стать одним из тех разработчиков, которые принимают новую концепцию, полностью упускают из виду и пытаются заставить ее вести себя так, как они привыкли. – Mike
AFAIK, это лучший способ сделать это. С C++ 11 вы можете оптимизировать это с помощью семантики перемещения, а для предыдущей версии RVO удаляет эту копию. Ваш объект создается из 'xmlpp :: Document', и у вас будет, пожалуй, одна копия ваших данных, которая будет такой же, как с использованием другого решения ... – Geoffroy
Кроме того, вы не должны беспокоиться об этом маленьком копировании пока ваша программа не будет работать, и вы определили эту часть как проблему производительности. – Geoffroy