【发布时间】:2013-10-01 22:19:11
【问题描述】:
我正在写一个模板<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 ?
提前致谢,
最好的问候,
【问题讨论】:
-
类模板的成员函数本身就是函数模板,当然你不能部分特化函数模板。但是,您可以将模板的公共部分分解为基类,并且只更改专业化中可修改的部分。
标签: c++ templates containers specialization