바람이 머문 언덕

template (템플리트) 기능이란 어떤 것인가. (C++) 본문

컴퓨터 IT/C++ 언어

template (템플리트) 기능이란 어떤 것인가. (C++)

알 수 없는 사용자 2009. 11. 27. 20:01
반응형

템플리트 기능이란 데이터 타입만 다를 뿐 골격이 동일한 경우에 사용하면 편리한 기능이다.

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> ( );