NOTE : Cette question n'est que vaguement liée à tinyxml, mais le fait d'inclure des détails comme ceux-là peut aider à mieux illustrer le concept.
J'ai écrit un modèle de fonction qui va itérer à travers les enfants d'un nœud XML parent, récupérer la valeur de l'élément enfant et ensuite pousser la valeur de cet élément enfant dans un vecteur.
La partie "récupérer la valeur" est également écrite comme un modèle de fonction :
c'est-à-dire
template <typename Type>
Type getXmlCollectionItem(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
Il existe des spécialisations pour la partie récupération, pour retourner différents types de valeurs d'éléments enfants, par exemple std::string et d'autres objets personnalisés.
c'est-à-dire
template <>
std::string getXmlCollectionItem<std::string>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
template <>
MyObject getXmlCollectionItem<MyObject>(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
Tout cela fonctionne parfaitement bien, mais je me suis rendu compte qu'il serait très utile de disposer d'une bibliothèque de fonctions partagées pour traiter les fichiers tinyxml.
Question : Est-il possible de déclarer un modèle de fonction dans un seul espace de nom, par ex. namespace UtilityFunctions
qui n'a aucune connaissance des types d'objets spécifiques tels que 'MyObject'
et ensuite déclarer et définir des spécialisations de ce modèle de fonction dans d'autres espaces de noms qui ont la connaissance de types d'objets spécifiques tels que 'MyObject'
?
Mon intuition est que ce n'est pas possible, mais le concept d'avoir un modèle de fonction commun me semble suffisamment utile pour qu'il y ait un moyen alternatif de se rapprocher de la fonctionnalité que je recherche...
Toutes nos excuses si la terminologie est incorrecte ou si l'explication n'est pas claire. J'ai fait beaucoup de recherches sur ce sujet (pour arriver à la spécialisation des modèles de fonctions dans le même espace de noms) mais je n'ai pas encore trouvé de réponse définitive.