我正在编写一个模板<class T>
类数组 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;
}
第一个解决方案的问题是我必须从主模板类中复制很多成员函数
我试图从初级班派生,但
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 ?
提前致谢,
此致,