上的模板方法專業化我有一個變體類,它使用一些函數模板專業化來獲取和設置不同的類型,這些類型在Visual Studio 2010中編譯和運行良好。但是,此代碼位於同樣需要編譯的通用解決方案中在RedHat,Ubuntu的等* nix
我收到了一個錯誤沿着非命名空間範圍顯式專業化的行。我認爲簡單的解決方法是簡單地在類的外部使用範圍限定符在同一名稱空間中爲類定義我的特化。
但是現在我得到了實例化後發生的特化錯誤,因爲從各種類型轉換而來的類的其他方法在類中使用此模板。
那麼什麼是做這樣的事情的正確方法:
namespace Example
{
class CSomeVariant
{
public:
bool toString(std::string& out)
{
return get(out);
}
private:
template <typename T>
bool get(T& val)
{
try {
val = boost::any_cast<T>(m_stored);
}
catch (...) {
return false;
}
return true;
}
boost::any m_stored;
};
template<>
bool CSomeVariant::get(std::string& val)
{
try {
if (m_stored.type() != typeid(std::string))
val = convertToString();
else
val = boost::any_cast<std::string>(m_stored);
}
catch(...) {
return false;
}
return true;
}
}
注:這是不實際的代碼,但我相信它顯示的問題。
奇怪,看起來像應該工作... – Benj
爲什麼你使用專業化而不是[簡單重載](http://ideone.com/W1KYE)? – ildjarn
@ildjarn嗯,因爲...好點。哇,我現在覺得很愚蠢。 – AJG85