我有一個從另一個模板繼承的模板,本身作爲第二個模板的模板參數。繼承的模板定義了一個靜態函數:具有靜態功能模板的模板專業化
template<class T> class A
{
public:
static void foo();
};
template<class T> class B : public A<B>
{
};
現在我要實現對A類專門爲B靜態函數,但爲B不專業。但我無法弄清楚如何聲明模板。我甚至不確定這是否可能。我的第一個嘗試是:
template<class T> void A<B<T>>::foo()
{
}
但這給出了錯誤:
"Nested name specifier 'A<B<T>>::" for declaration does not refer into a class, class template or class template partial specialization"
我試着像前面添加「模板<>」,但沒有工作的那些不同的東西。我能夠編譯此:
template<> void A<B<int>>::foo()
{
}
除了這一點:
template<class T> void A<T>::foo()
{
}
這是在部分專業化的嘗試?我的第一印象是沒有(有沒有模板與多個參數,我想專門化其中之一)。相反,我想用另一個不專門的模板專門化模板。這是可能的,如果是這樣,什麼是正確的語法?
謝謝,我剛剛糾正。我想實現A與B的專業化的靜態功能,但沒有專門化B. – sweatervest