私はテンプレート<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> >
意味がありません
2 番目の解決策の問題は、考えられるすべての型の特殊化を複製する必要があり、テンプレート クラスの目的が無効になることです。
を定義することが可能であるため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の特殊化をテンプレート化できますか?
前もって感謝します、
よろしくお願いします、