注意:这个问题与tinyxml只是松散相关,但是包括这样的细节可能有助于更好地说明这个概念。
我编写了一个函数模板,它将迭代父 XML 节点子节点,检索子元素的值,然后将该子元素值推送到向量。
“检索值”部分也写为函数模板:
i.e.
template <typename Type>
Type getXmlCollectionItem(
const char* elementName, TiXmlNode* child, TiXmlNode* parent);
检索部分有专门化,用于返回不同类型的子元素值,例如std::string 和其他自定义对象。
i.e.
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'
?
我的预感是这是不可能的,但在我看来,拥有通用函数模板的概念似乎足够有用,因为有一种替代方法可以接近我正在寻找的功能......
如果任何术语不正确或解释不清楚,我们深表歉意。我围绕这个主题做了很多研究(以达到在同一名称空间内工作函数模板专业化的目的),但尚未找到明确的答案。