我的問題如下,我有一個模板物件,并且在這個物件中有一個方法也是模板,我想對其進行專門化,只有編譯器總是回傳錯誤:“包含模型引數串列的模型宣告可以后面不是顯式的特化宣告。我想了解在這種情況下如何特化方法,這里是代碼:
template<typename T>class Foo
{
public:
template<typename T2> Foo<T2> cast(void);
};
template<typename T> template<typename T2> Foo<T2> Foo<T>::cast(void)
{
Foo<T2> tmp;
std::cout << "1" << std::endl;
return tmp;
}
template<typename T> template<> Foo< int > Foo<T>::cast< int >(void)
{
Foo<int> tmp;
std::cout << "2" << std::endl;
return tmp;
}
int main()
{
Foo<double> bar();
bar.cast<int>();
}
uj5u.com熱心網友回復:
問題是如果不完全特化類模板,我們就不能完全特化成員函式模板。這意味著正確的語法如下所示:
template<typename T> struct CompressVector
{
template<typename T2> CompressVector<T2> cast();
};
template<typename T> template<typename T2> CompressVector<T2> CompressVector<T>::cast()
{
CompressVector<T2> tmp;
//other code here
return tmp;
}
//vvvvvvvvvv-vvvvvvvvv-------------------------------------vvv------------>made changes here
template<> template< > CompressVector<int> CompressVector<int>::cast< int >(void)
{
CompressVector<int> tmp;
//other code here
return tmp;
}
作業演示
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/518280.html
標籤:C 模板专业化
下一篇:遞回模板實體化因元組而失敗
