首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问一个模板类的特例化有关问题

2012-04-17 
请教一个模板类的特例化问题打算写一个集合模板类,它的主要功能是可以打印集合中的元素,模板类的声明如下:

请教一个模板类的特例化问题
打算写一个集合模板类,它的主要功能是可以打印集合中的元素,模板类的声明如下:

//*****************************************************
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”: 无法将函数定义与现有的声明匹配  


请问有没有可能实现这样的特例化成员函数,特例化的对象是某个模版?
还请各位高手不吝赐教!




[解决办法]
你应该把你的printMember成员函数声明成成员模板函数


[解决办法]
按照3L的方法将printMember本身也声明定义为一个模板函数。
然后提供相应的偏特化的重载版本。

热点排行