일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
27 | 28 | 29 | 30 |
- 멀티쓰레드
- DirectX 12
- 백준
- codility
- 쓰레드
- 병행성
- 병행성 관련 오류
- 그리디 알고리즘
- 디자인패턴
- 렌더링 파이프라인
- 락
- 멀티프로세서
- 자료구조
- 타입 객체
- 다이나믹 프로그래밍
- 컨디션 변수
- DirectX12
- 동적계획법
- 알고리즘
- 스케줄링
- OS
- 운영체제
- 그리디알고리즘
- 파일시스템 구현
- directx
- 영속성
- I/O장치
- Direct12
- 다이나믹프로그래밍
- 프로그래머스
- Today
- Total
기록공간
템플릿(Template) 본문
템플릿은 C++ 프로그래밍 언어의 한 기능으로, 일반화 프로그래밍(Generic Programming)에 있어서 절대적으로 빼놓을 수 없는 C++ 표준 라이브러리 중 하나이다. 각 요수를 일반화하여 개별적으로 다시 작성하지 않고도 각기 다른 수많은 자료형에서 동작할 수 있게 해준다. 일종의 형틀이라고 생각하면 편하다. 원하는 모양을 직접 조각하거나 빗는 것은 시간이 오래 걸리지만 형틀만 단순히 찍어내기만하면 바로 만들 수 있다.
템플릿 종류는 크게 두가지 종류로 나뉘어 사용할 수 있는데, 함수로 쓰이는 함수 템플릿과 클래스로 쓰이는 클래스 템플릿이 그것이다. 우선 함수 템플릿 부터 살펴보도록 하겠다.
함수 템플릿(Function Template)
함수를 만들어 낼때, 함수의 기능은 명확하지만 자료형을 모호하게 두는 것을 함수 템플릿이라고 할수 있겠다.
예) Sum 함수 : 인자 2개를 받아서 더한 값을 return하는 함수를 만들어보자.
-> C++에서는 다형성의 오버로딩(Overloading)특성에 의해 함수이름이 같아도 되므로,
template이 없을때에는 아래와 같이 각각 인자의 타입을 다르게 하여 만들면 된다.
int sum(int a, int b)
{
return a + b;
}
double sum(double a, double b)
{
return a + b;
}
하지만 template을 사용하면, 아래와 같이 하나의 함수만 정의하면 된다.
template<typename T>
T sum(T a, T b)
{
return a + b;
}
인자를 2개 받을때 두개의 타입이 다른 경우는 이런식으로 정의하면 된다.
template<typename T1, typename T2>
void printSize(T1 a, T2 b)
{
cout << "First Value Size : " << sizeof(a) << endl;
cout << "Second Value Size : " << sizeof(b) << endl;
cout << "Sum Size" << sizeof(a + b) << endl;
}
<> 괄호안에는 class나 typename 둘다 가능하지만 웬만하면 typename을 추천한다.
종류로는 함수 템플릿 또는 템플릿 함수 두가지로 표기 할 수 있는데, 이런 단어들은 뒤쪽이 진짜다. 의미를 정리 해보자.
- 함수 템플릿 : 함수를 기반으로 구현이 된 템플릿 (함수 X)
- 템플릿 함수 : 함수 템플릿으로부터 함수로 만드는 과정을 거친 최종적인 함수 (구체화, 인스턴스화)
앞서 위에서 살펴 보았던 것이 함수 템플릿이고 이것을 템플릿 함수로 표현하면 이렇게 된다.
int sum(int num1, int num2)
{
/*내용 위와 동일*/
}
템플릿 함수를 만드는 방법 메인에서 함수를 그냥 사용하면 된다.
//...
int a = 100;
int b = 2000;
//1
sum<int>(a, b);
//2
sum(a, b);
위에 1처럼 자료형을 명시해줘도 되지만 아래 2처럼 명시하지 않아도 자료형을 인식한다.
하지만 자료형이 T1, T2로 하여 두 자료형이 서로 다르다면 자료형을 반드시 명시해줘야 한다.
'C++' 카테고리의 다른 글
decltype 키워드 (0) | 2020.04.03 |
---|---|
자동 함수 리턴 타입 (C++14) (0) | 2020.04.03 |
새로운 함수 정의 문법(C++11) (0) | 2020.04.03 |
std::array (0) | 2020.04.03 |
엄격한 열거 타입 (0) | 2020.04.03 |