ПРИМЕЧАНИЕ. Этот вопрос только слабо связан с 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.
Вопрос: Можно ли объявить шаблон функции в одном пространстве имен, например, namespace UtilityFunctions
, который не имеет каких-либо знаний о конкретных типах объектов, таких как 'MyObject'
, а затем объявляет и определяет специализации этого шаблона функции в других пространствах имен, которые имеют знания о конкретных типах объектов, таких как 'MyObject'
?
Я догадываюсь, что это невозможно, но концепция наличия общего шаблона функций мне кажется достаточно полезной, чтобы найти альтернативный способ приблизиться к нужной мне функциональности ...
Извинения, если какая-либо терминология неверна или объяснение неясно. Я провел много исследований по этой теме (чтобы понять специализацию рабочих шаблонов функций в одном и том же пространстве имен), но пока не нашел однозначного ответа.