我正在編寫一個模板<class T>
類似數組的類A,我想專門化幾個成員函數來處理數組數組A<A<T>>
。C++:如何專門化模板的成員函數數組類A類來處理A <A<T>>?
這裏是一個工作的例子,是接近我想要的:
#include "stdio.h"
//primary template class
template <class T> class A {
public: void f() {printf("A<T>::f\n");}
};
//1st solution : specialization (?) of A for A<A<T>>
template <class T> class A< A<T> > {
public: void f() {printf("A<A<T>>::f\n");}
};
//2nd solution : specialization of A::f for A<A<int>>
template<> void A< A<int> >::f() {
printf("A<A<int>>::f\n");
}
int main(void) {
A<int> A_int;
A< A<int> > A_A_int;
A< A<double> > A_A_double;
A_int.f(); // ok : prints A<T>::f
A_A_int.f(); // ok : prints A<A<int>>::f
A_A_double.f(); // ok : prints A<A<T>>::f
return 0;
}
與第1解決方案的問題是,我必須從主模板類
我複製了大量的成員函數試圖從主類派生但
template <class T> class A< A<T> > : public A< A<T> >
是沒有意義的
第二種解決方案的問題是我必須爲每種可能的類型重複專業化,並且這違背了模板類的目的。
由於可以定義template<> void A< A<int> >::f()
,所以似乎應該能夠對任何類型的這個專業化進行「模板化」。我想:
template <class T> template<> void A< A<T> >::f()
template <template <class T> > void A< A<T> >::f()
template <template <> class T> void A< A<T> >::f()
等荒謬的語法......
所以......我可以模板化專業化template<> void A< A<int> >::f()
不只是爲INT但對於任何類型T?
由於提前,
最好的問候,
類模板的成員函數本身就是函數模板,但是當然,您不能部分地專用函數模板。但是,您可以將您的templae的常見部分分解爲基類,並只更改專業化中的可修改部分。 –