NOTA: Esta pregunta solo está vagamente relacionada con tinyxml, sin embargo, incluir detalles como este puede ayudar a ilustrar mejor el concepto.Especialización de la plantilla de función en otra clase/espacio de nombres?
He escrito una plantilla de función que iterará a través de uno de los nodos principales XML secundarios, recuperará el valor del elemento hijo y luego insertará el valor del elemento secundario en un vector.
El 'recuperar el valor' parte también escrito como una plantilla de función:
es decir
template <typename Type>
Type getXmlCollectionItem(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
Hay especializaciones para la parte de recuperación, para el retorno de los diferentes tipos de valor de elemento de niño, por ejemplo std :: string y otros objetos personalizados.
decir
template <>
std::string getXmlCollectionItem<std::string>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
template <>
MyObject getXmlCollectionItem<MyObject>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
Todo esto funciona perfectamente bien, sin embargo, se me ocurrió que esto sería muy útil disponer de una biblioteca función compartida cuando se trata de archivos TinyXML.
Pregunta: ¿Es posible declarar una plantilla de función en un espacio de nombres, por ej. namespace UtilityFunctions
, que no tiene ningún conocimiento de tipos de objetos específicos como 'MyObject'
, y luego declarar y definir especializaciones de esa plantilla de función en otros espacios de nombres que sí tienen conocimiento de tipos de objetos específicos como 'MyObject'
?
Mi corazonada es que no es posible, pero el concepto de tener una plantilla de función común me parece lo suficientemente útil para que haya una forma alternativa de acercarme a la funcionalidad que estoy buscando. ..
Disculpa si alguna de la terminología es incorrecta o si la explicación no está clara. He investigado mucho sobre este tema (para llegar al punto de la especialización de la plantilla de funciones de trabajo dentro del mismo espacio de nombres) pero aún no he encontrado una respuesta definitiva.
Puede usar sobrecargas de funciones ... devolver bool o código de error y pasar un parámetro de salida por referencia. – AJG85
Sí, eso sería mucho más fácil :) –
[Este artículo de Herb Sutter] (http://www.gotw.ca/publications/mill17.htm) sobre la especialización de funciones puede influir en ti ;-) – AJG85