[디딤돌 C++] 59. 전역 템플릿 함수

학생) 전역 템플릿 함수를 정의하면 컴파일러는 사용하는 템플릿 형식 인자에 따라 실제 함수를 만듭니다.

이번에는 전역 템플릿 함수를 만들고 사용하는 방법을 살펴볼게요.

전역 템플릿 함수는 형식은 달라도 알고리즘이 같을 때 템플릿 함수를 정의하여 사용합니다. 그리고 일부 알고리즘이 다를 때 이 또한 템플릿 인자를 추가하여 만들 수 있습니다.

먼저 전역 템플릿 함수를 만드는 방법을 알아봅시다. 템플릿 함수는 template 키워드 뒤에 템플릿 형식 인자 목록을 < >내부에 표현합니다. 이 때 템플릿 형식 인자는 가상의 이름으로 정하여 함수 코드를 정의할 때 사용합니다.

template <typename [가상 타입명],…>

[리턴형식] 템플릿 함수명(입력인자리스트)

{

   [코드]

}

 

typename 대신 class 예약어를 사용할 수도 있습니다.

template <typename [가상 타입명],…>

[리턴형식] 템플릿 함수명(입력인자리스트)

{

   [코드]

}

n 개의 데이터 중에 최대값이 있는 메모리 주소를 찾는 전역 템플릿 함수를 만들어서 사용해 봅시다. 이를 위해 데이터 형식과 데이터를 비교하기 위한 알고리즘이 필요하겠죠. 여기에서는 비교 데이터 형식을 data, 비교 알고리즘을 compare 이름을 사용할게요.

이처럼 정의한 템플릿 함수를 사용하는 곳에서는 원소 형식에 관계없이 연속적인 메모리에 데이터를 보관하고 있을 때 비교 알고리즘을 구체적으로 정의하여 get_max_pos 전역 템플릿 함수를 호출하면 컴파일러에서는 사용하는 형식 인자에 맞게 get_max_pos 함수를 기계어 코드에 작성합니다. 물론 사용하는 형식이 다르면 컴파일러는 get_max_pos 함수를 여러 개를 기계어 코드에 작성합니다.

다음은 int 형식을 원소로 하는 배열에서 최대값이 있는 위치를 찾기 위해 전역 템플릿 함수 get_max_pos를 호출하는 코드입니다. 먼저 비교 알고리즘을 함수로 정의합니다.

이처럼 호출하여 사용하면 컴파일러에서는 템플릿 형식 인자 data를 int로 compare를 compare_int로 변환하여 기계어 코드를 작성하여 이를 호출하게 합니다.

다음은 Book의 ISBN이 최대(사전식 비교)인 도서 개체를 찾기 위해 전역 템플릿 함수 get_max_pos를 호출하는 예제 코드입니다.

다음은 앞에서 설명했던 예제 코드입니다.

▷ 실행 결과


[C++ 무료 동영상 강의] 58. 템플릿(Template 개요) 59. 전역 템플릿 함수

학습에 도움이 되시면 ebook을 구입(판매가 5000원, ebook)하여 소장하시면 감사하겠습니다.