请教一个模板类的特例化问题
打算写一个集合模板类,它的主要功能是可以打印集合中的元素,模板类的声明如下:
//*****************************************************
template <typename T> class Aggregate
{
public:
void append(T& val); //添加元素
void printMember(); //打印元素
private:
CArray<T> m_list; //成员的实际存储
};
//***************************************************
以及两个成员函数的一般实现和 printMember()的整型的特例化实现:
//***************************************************
template<typename T>
void Aggregate<T>::append(T &val)
{
m_list.Add(val);
}
template<typename T>
void Aggregate<T>::printMember()
{
//什么也不做
}
template<>
void Aggregate<int>::printMember()
{
int num=m_list.GetCount();
printf("输出整数集合--\n");
for(int i=0; i<num; i++)
{
printf("mem%d %d\n",(i+1), num);
}
}
//****************************************************
现在的问题是,我需要对printMember做一个特例化,希望当m_list存储的是一个Aggregate <T> *时,能递归的调用printMember,从而实现打印内嵌的集合中的每个元素。
我是这样的写的,但是编译不过:
template<> template<typename T>
void Aggregate< Aggregate <T> *>::printMember()
{
int num=m_list.GetCount();
printf("输出包含集合--\n");
for(int i=0; i<num; i++)
{
Aggregate<T> * ele=m_list.GetAt(i);
ele->printMember();
}
} //这一行出错 错误 error C2244: “Aggregate<T>::printMember”: 无法将函数定义与现有的声明匹配
请问有没有可能实现这样的特例化成员函数,特例化的对象是某个模版?
还请各位高手不吝赐教!