一部のコードを 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;
}
正確な構文がサポートされていないだけで、マイナーな変更で機能するのでしょうか、それともこのような特殊化を避けるためにコードを変更する必要がありますか? 後者の場合、一般的にこれを行うための最良の方法はどれですか?