C++中如何去掉模板类

有段代码是带有模板类的,但是我想去掉,就变成最简单那种的
template <class ElemType,class InfoType>
class AVLNode
{
public:
ElemType elem;
int balance;
InfoType data;
AVLNode *lchild;
AVLNode *rchild;
};
template <class ElemType, class InfoType>
void LeftRotateForInsert(AVLNode<ElemType,InfoType> *(&p), int &hight)
{
AVLNode<ElemType,InfoType> *p1, *p2;

if(p->balance == 0) //需要回溯判断其祖先是否也已经平衡
{
p->balance = 1;
hight = 1;
}
else if(p->balance == -1)
{
p->balance = 0;
hight = 0;
}
else
{
p1 = p->lchild;

if(p1->balance == 1) //左旋转
{
p->lchild = p1->rchild;
p1->rchild = p;
p->balance = 0;
p1->balance = 0;
p = p1;
}
else if(p1->balance == -1)
{
//右旋转
p2 = p1->rchild;
p1->rchild = p2->lchild;
p->lchild = p2->rchild;
p2->lchild = p1;
p2->rchild = p;

if(p2->balance == 0)
{
p->balance = 0;
p1->balance = 0;
}
else if(p2->balance == -1)
{
p1->balance = 1;
p->balance = 0;
}
else
{
p1->balance = 0;
p->balance = -1;
}
p = p2;
p->balance = 0;
}
hight = 0;
}
}
template <class ElemType, class InfoType>
bool AVLInsert(AVLNode<ElemType,InfoType> *(&p), ElemType elem, int &hight)
{//插入
if(p == NULL) //如果为空树
{
p = new AVLNode<ElemType,InfoType>;
p->elem = elem;
p->lchild = NULL;
p->rchild = NULL;
p->balance= 0;
hight = 1;
}
else
{
if(elem == p->elem) //有相同关键字,不插入
{
hight = 0;
return 0;
}
else if(elem < p->elem)
{
if(!AVLInsert(p->lchild, elem, hight)) //左子树有相同关键字
return 0;
if(hight == 1) //插入成功且左子树长高了
LeftRotateForInsert(p,hight);
}
else
{
if(!AVLInsert(p->rchild, elem, hight)) //子树有相同关键字
return 0;
if(hight == 1)
RightRotateForInsert(p,hight);
}
}
return 1;
}

很简单,你删除所有的template <...>,把所有AVLNode<ElemType,InfoType>改成AVLNode,定义

class ElemType
{
public:
bool operator ==(ElemType const&) const;
bool operator <(ElemType const&) const;
};

class InfoType
{

};

应该OK了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-10
除非很熟悉C++,否则去不掉,会出现一大堆编译错误
第2个回答  2014-03-11
我该说什么好。。
相似回答