注:这个问题只与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的文件打交道时,有一个共享的函数库是非常有用的。
问题:是否可以在一个命名空间中声明函数模板,例如namespace UtilityFunctions
,它不具有'MyObject'
等特定对象类型的任何知识,然后在具有特定对象类型知识的其他名称空间中声明和定义该函数模板的特化,例如'MyObject'
?
我的预感是,这是不可能的,但有一个共同的功能模板的概念似乎对我来说足够有用,因为那里有一个接近我正在寻找的功能的替代方法。 ..
道歉,如果任何术语不正确或解释不清楚。我围绕这个话题做了大量的研究(为了在相同的命名空间中找到工作函数模板专门化的观点),但还没有找到明确的答案。
您可以使用函数重载...返回布尔或错误代码并通过引用传递出参数。 – AJG85 2012-01-18 15:25:35
是的,这将是更容易:) – 2012-01-18 15:28:36
[本文由Herb萨特](http://www.gotw.ca/publications/mill17.htm)功能专业化可能摇摆你;-) – AJG85 2012-01-18 15:42:28