我試圖將一些代碼從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