바람이 머문 언덕
template (템플리트) 기능이란 어떤 것인가. (C++) 본문
템플리트 기능이란 데이터 타입만 다를 뿐 골격이 동일한 경우에 사용하면 편리한 기능이다.
template<class T> int function(T i, T k)
{
return (i < k) ? 1 : 0;
}
위에 처럼 만들어 놓으면 다른 여러가지 형을 데이터에서 사용 할 수 있다.
int형에서 사용하고 싶으면 int function(int i, int k); , long 형의 데이터를 사용 한다면
int function(long i, long k); 라고 플로토 타입을 적어 주면 된다. 두 개다 동시에 적어도 된다.
그리고 template 함수는 라이블리 함수로 만들 수 없다. 소스 형태로 포함 되어야 한다.
template 클래스는 기능을 클래서에 적용해서 좀 더 큰 효과를 기대 할 수 있다.
선언 하는 형식이 다를 뿐 개념은 같다.
템블리트 클래스 선언예
template<class N,class D> class Ndblist
{
public:
Ndblist( int ( *fcmp)(D *,D * )) ;
~Ndblist( ) { alldel(); }
N *add(D *dt); //추가
void del( N *temp ); //노드 삭제
protected:
N *btmnode, *topnode;
unsigned int icount;
};
template<class N,class D> Ndblist<N,D>::Ndblist( )
{
btmnode=topnode=NULL; icount=0;
}
template<class N,class D>N *Ndblist<N,D>::add(D *dt)
{
N *istnode=new N;
if(istnode)
{
istnode->dt = dt;
if(btmnode)
{
istnode->prev=topnode; istnode->next=topnode->next;
topnode->next=istnode;
}
else
{
btmnode=istnode;
istnode->prev=istnode->next=NULL;
}
topnode=istnode; ++icount;
}
return istnode;
}
template<class N,class D> void Ndblist<N,D>::del( N *temp )
{
icount--;
if(temp->next) temp->next->prev=temp->prev;
else topnode=temp->prev;
(temp->prev) ? temp->prev->next=temp->next : btmnode=temp->next;}
delete temp->dt;
delete temp;
}
template<class N,class D> void Ndblist<N,D>::alldel()//
{
N *temp=btmnode;
while(temp)
{
btmnode = temp->next;
delete temp->dt;
delete temp;
temp = btmnode;
}
icount=0;
btmnode=topnode=NULL;
}
// 템플리트 생성 예
struct data
{
char buf[16];
long money;
unsigned long code;
} ;
struct node
{
node *prev;
data *dt;
node *next;
} ;
Ndblist *molist= new Ndblist<node,data> ( );