Home C++_Template
Post
Cancel

C++_Template

함수 템플릿

C++ 문서 템플릿 문서

하나의 클래스를 다양한 자료형에서 사용할 수 있게 만드는 기법이다. 만약 template <typename T> 선언이 없으면 오류.(T가 자료형인지 모르니까). 이후 T가 자료형을 선언해준다.

  • Note. template <typename T> 대신 template <class T> 를 이용해도 된다. -> 동일한 의미이다

템플릿 정의는 실제 함수 정의가 아님. 함수 생성은 함수 호출. 즉 T에 대입 되는 변수 타입에 따라 새로운 함수가 생성되는 것임.(템플릿 함수 인스턴스화) 함수는 각 자료형 당 하나씩만 만들어지고, 그에 따라 컴파일 속도는 느려지지만 실행속도는 별개.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <iostream>
#include <typeinfo>

using namespace std;

// 함수 템플릿(Function Template), 타입 선언
template <typename T>
T get_max(T x, T y)
{
    cout << "Type: " << typeid(T).name() << endl; // 타입 정보 출력
    if (x > y)
        return x;
    else
        return y;
}

int main()
{
    // 정수 버전 get_max
    cout << get_max(1, 3) << endl;

    // 실수 버전 get_max
    cout << get_max(1.2, 3.9) << endl;

    return 0;
}
1
2
3
4
Type: i
3
Type: d
3.9

get_max() 에서 변수 타입 선언 안해도 되는이유: 함수 오버로딩

물론 호출 마다 get_max<int>() 처럼 타입 선언해도 상관 X. 명시용

  • 함수 템플릿(Function Template) : 함수를 기반으로 만들어진 템플릿
  • 템플릿 함수(Template Function) : 템플릿을 기반으로 만들어진 함수

클래스 템플릿

C++ 문서 템플릿 문서

함수 뿐만 아니라 클래스도 가능

템플릿 vs 추상클래스 vs 인터페이스

목적

  • 템플릿: 다양한 데이터 타입 또는 다양한 값에 대한 코드를 생성하는 데 사용
  • 추상클래스: 하나 이상의 순수 가상 함수 (pure virtual function)를 포함하며, 객체를 직접 생성할 수 없는 클래스. 인터페이스를 정의하고 파생 클래스에서 공통된 동작을 구현
  • 인터페이스: 구현 클래스에서 구체적인 동작을 제공
This post is licensed under CC BY 4.0 by the author.