Специализация шаблона функции в другом классе / пространстве имен?

ПРИМЕЧАНИЕ. Этот вопрос лишь частично относится к 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' ?

Мне кажется, что это невозможно, но концепция наличия общего шаблона функции кажется мне достаточно полезной, чтобы существовал альтернативный способ приближения к функциям, которые я ищу ...

Приносим извинения, если какая-либо терминология неверна или объяснение неясно. Я провел много исследований по этой теме (чтобы добраться до точки специализации шаблона рабочих функций в том же пространстве имен), но пока не нашел окончательного ответа.

5
задан Adam Marshall 18 January 2012 в 15:10
поделиться