프로그래밍언어/C++

[C++] 템플릿 (1)

qkzkdo 2023. 9. 19. 21:39
728x90

컨테이너(container) 클래스

컨테이너 클래스란 다른 객체를 저장하는 클래스로서, 그 예로 스택, 큐, 배열, 리스트 등을 들 수 있다.동일한 유형의 컨테이너일지라도 저장하고자 하는 객체의 유형이 다르면 이에 맞게 새로운 클래스를 선언하여야 한다.

 

템플릿(template)

템플릿은 클래스를 선언할 때 객체의 자료형을 고려하지 않고, 객체의 자료형을 인수로 처리한다. 컨테이터 클래스를 선언할 때 특정 자료형이 아닌 일반적인 자료형을 대상으로 하는 템플릿을 작성한다. 특정 자료형을 위한 컨테이너 객체가 필요할 대 그 자료형을 템플릿의 매개변수로 전달하여 그 자료형에 해당되는 클래스가 자동적으로 선언되게 한다.

 

클래스 템플릿 선언

template <templateParameters> class ClassTemplateName {
    ....
};

※ templateParatemers : 템플릿 매개변수 목록
※ ClassTemplateName : 클래스 템플릿 이름

 

클래스 템플릿에 속한 멤버함수를 클래스 템플릿 선언 외부에서 하는 형식

template <templateParameters>
ReturnType ClassTemplateName<args>::funcName(fParameterList)
{
    ...
}

※ ReturnType : 멤버함수의 반환 자료형
※ funcName : 멤버함수의 이름
※ args : templateParaleters로 전달된 인수
※ fParameterList : 멤버함수의 형식 매개변수 목록

 

스택 클래스 템플릿의 선언

 

 

객체의 정의

클래스 템플릿에 대한 객체를 정의할 때에는 실제 클래스 템플릿이 취급할 변수형 또는 클래스의 이름을 인수로 전달하여 정의한다.

 

클래스 템플릿에 대한 객체 정의

ClassTemplateName<ClassName> objName(constrArgs);

※ ClassName : 템플릿 매개변수에 전달할 클래스 또는 자료형 이름
※ objName : 정의할 객체의 이름
※ constrArgs : 생성자에 전달할 인수

 

비자료형 템플릿 매개변수

클래스 템플릿의 매개변수가 반드시 자료형을 전달받는 매개변수일 필요는 없다. 템플릿 선언에 포함될 수 있는 비자료형 템플릿 매개변수는 정수형 자료형의 상수식, 객체나 함수에 대한 포인터나 l-value 참조, 멤버에 대한 포인터 등을 받을 수 있게 선언할 수 있다.

 

 

 

출처 : 전중남·이병래. 「C++프로그래밍」. 한국방송통신대학교출판문화원. 2020

728x90