我试图将一些代码从VC9移植到G ++,但是我遇到了模板专门化问题,显然不允许类成员使用。类模板专业化的问题
以下代码是类方法的getValue专业化的这些错误的示例。在所有情况下,错误是“错误:明确的专业化非命名空间范围class ...
”
template<typename T> T getValue(const_iterator key)const
{
try{return boost::lexical_cast<T>(key->second);}
catch(boost::bad_lexical_cast &e)
{
throw TypeParseError<T>(name, key->first, e.what());
}
}
template<typename T> T getValue(const std::string &key)const
{
iterator i = find(key);
if(i == end())throw KeyNotFound(name,key);
else return getValue(i);
}
template<> std::string getValue<std::string>(const_iterator key)const
{
return key->second;
}
template<> std::string getValue<std::string>(const std::string &key)const
{
const_iterator i = find(key);
if(i == end())throw KeyNotFound(name,key);
else return i->second;
}
难道仅仅是确切的语法不支持,那一个微小的变化将使其工作,或者我需要更改代码以避免这样的专业化?如果后者是一般这样做的最佳方式?
+1的答案,也见矿为标准的摘录。 – 2009-12-09 17:39:20