template<typename T>
class CompoundT { // primary template
public:
enum { IsPtrT = 0, IsRefT = 0, IsArrayT = 0,
IsFuncT = 0, IsPtrMemT = 0 };
typedef T BaseT;
typedef T BottomT;
typedef CompoundT<void> ClassT;
};
template<typename T, size_t N>
class CompoundT <T[N]> { // partial specialization for arrays
public:
enum { IsPtrT = 0, IsRefT = 0, IsArrayT = 1,
IsFuncT = 0, IsPtrMemT = 0 };
typedef T BaseT;
typedef typename CompoundT<T>::BottomT BottomT;
typedef CompoundT<void> ClassT;
};
,并在主:探测器阵列类型不工作
template<class T>
bool isArray(T a)
{
return CompoundT<T>::IsArrayT;
}
int _tmain(int argc, _TCHAR* argv[])
{
int a[10];
cout << isArray(a);
return 0;
}
为什么这不起作用?这个例子来自“模板完整指南”ch.19.2。
第一个模板中是否也需要'size_t N',这样第二个模板才被认为是第一个模板的部分特化? – Arun 2010-10-10 19:19:32