Я использую gSOAP для привязки данных XML.
Недавно я реорганизовал свои файлы XSD, извлекая общую часть из двух файлов в отдельный третий файл, а затем импортируя ее в первые два файла. Это был глубокий и сложный элемент, который был переработан.
В реальном коде я хотел бы иметь одну функцию, которая принимает объект сгенерированного типа gSOAP, описывающий этот элемент, и создает некоторые внутренние объекты.
Но для этого мне нужно, чтобы сгенерированный класс был стабильным и одинаковым для обоих окончательных файлов XSD (чтобы функция могла принимать один тип). Но я не вижу никакого способа добиться этого.
Есть ли решение?
Я решил сделать функцию шаблоном, основываясь на том факте, что даже если сгенерированные типы различаются (в частности, из-за того, что они находятся в разных пространствах имен C++), они имеют одни и те же члены, поэтому шаблон должен работать хорошо. Но это требует от меня раскрытия реализации, которую я не хочу делать (она сложна в соответствии со сложностью элемента).
Другой подход, который я пробовал, заключался в том, чтобы заставить gSOAP сгенерировать код для обоих основных файлов XSD в одном и том же пространстве имен C++, чтобы код, сгенерированный для импортированного XSD, считался одинаковым. Но это приводит к проблемам со ссылками, поскольку определения повторяются.