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