언어 자료구조 알고리즘/Escort C++

[C++] 전역 템플릿 함수

언제나휴일 2016. 4. 15. 15:28
반응형

9.1 템플릿이란?

 

템플릿은 ''이라는 사전적 의미를 지니고 있습니다. C++언어의 템플릿 문법은 가상의 코드를 정의하면 컴파일러가 이를 사용하는 부분을 컴파일하면서 구체화한 코드를 생성하는 틀을 말합니다. , 템플릿으로 정의한 코드는 가상의 코드이며 실제 구체화한 코드는 컴파일 시에 컴파일 전개로 생성됩니다. 이러한 이유로 템플릿 코드는 헤더에 작성하는 것이 일반적입니다.

 

 템플릿으로 가상의 코드를 정의하면 대부분 사용할 인자의 형식은 다르지만 수행해야 할 논리가 같을 경우입니다.

 

9.2 전역 템플릿 함수

 

 템플릿 문법을 이용하여 template 전역 함수를 만드는 방법에 대해 살펴봅시다. 템플릿 함수는 다음과 같이 작성합니다.

 

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

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

{

   [코드]

}

 

 이와 같은 형식으로 함수를 작성하면 이를 사용하는 부분을 만났을 때 컴파일러가 구체화 된 함수를 작성하고 이를 호출하는 구문으로 변경해 줍니다.

 

MyTemplateMethod.h

#pragma once

#include <iostream>

using namespace std;

template <typename T>

void Foo(T t)

{

    cout<<typeid(Foo<T>).name()<<endl;

}

  

 이처럼 템플릿 함수 Foo를 코딩하여도 이를 사용하는 코드가 없으면 이 템플릿 함수는 구체화 된 함수로 컴파일되지 않습니다이를 사용하는 코드를 만났을 때 컴파일러는 템플릿 타입에 맞게 구체화한 함수를 템플릿 함수를 기반으로 작성하고 이를 호출하는 구문으로 전개합니다.

 

Example.cpp

#include "MyTemplateMethod.h"

void main()

{

    Foo(1);

    Foo('a');

}

 

 템플릿으로 작성한 Foo함수를 정수형으로 사용하는 경우와 문자형으로 사용하는 경우를 예를 들었습니다. 이 같은 경우에 컴파일러는 사용하는 것에 맞게 함수를 작성하고 이를 호출하는 구문으로 전개합니다.

 

void Foo<>(int t)

{

    cout<<typeid(Foo<int>).name()<<endl; 

}

 

void Foo<>(char t)

{

    cout<<typeid(Foo<int>).name()<<endl; 

}

void main()

{

    Foo<>(1); //void Foo<>(int t) 함수로 연결

    Foo<>('a');//void Foo<>(char t) 함수로 연결

}


 

[그림 9.1]


9장 릿

(모든 동영상 강의는 무료입니다.)

반응형