ПРИМЕЧАНИЕ. Этот вопрос лишь частично относится к tinyxml, однако включение подобных деталей может помочь лучше проиллюстрировать концепцию.
Я написал шаблон функции, который будет перебирать дочерние родительские узлы XML, извлекать значение дочернего элемента и затем передавать значение этого дочернего элемента в вектор.
Часть «получить значение» также записана как шаблон функции:
т.е.
template <typename Type>
Type getXmlCollectionItem(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
Существуют специализации для части поиска, для возврата различных типов значений дочерних элементов, например std :: string и другие настраиваемые объекты.
т.е.
template <>
std::string getXmlCollectionItem<std::string>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
template <>
MyObject getXmlCollectionItem<MyObject>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
Все это работает отлично, однако меня поразило, что это было бы очень полезно иметь в общей библиотеке функций при работе с файлами tinyxml.
Вопрос: Можно ли объявить шаблон функции в одном пространстве имен, например, пространство имен UtilityFunctions
, которое не знает конкретных типов объектов, таких как 'MyObject'
, а затем объявляет и определяет специализации этого шаблона функции в других пространствах имен, которые знают конкретные типы объектов, такие как 'MyObject'
?
Мне кажется, что это невозможно, но концепция наличия общего шаблона функции кажется мне достаточно полезной, чтобы существовал альтернативный способ приближения к функциям, которые я ищу ...
Приносим извинения, если какая-либо терминология неверна или объяснение неясно. Я провел много исследований по этой теме (чтобы добраться до точки специализации шаблона рабочих функций в том же пространстве имен), но пока не нашел окончательного ответа.