WinCNT

템플릿(Template) 본문

게임 프로그래밍(학습 내용 정리)/C++

템플릿(Template)

WinCNT_SSS 2021. 12. 23. 14:06

일반화 프로그래밍(Generic Programming)

C#, JAVA에서는 Generic이라도 한다

 

특정 타입에 상관 없이 동작을 만든다

템플릿은 사용하는 것은 쉽고, 만드는 것은 어렵고, 모던 C++이 얽히면 읽는 것도 어려워진다...

 

어디에 필요할까?

대표적인 예로는 자료 구조를 만들 때

Linked List의 예

List의 대상이 되는 자료형마다 클래스를 만들어야 한다

(int의 Linked List, char의 Linked List 등등)

자료형에 무관하게 만들 순 없을까? => 일반화 프로그래밍으로 가능!

 

Template의 예제

template <typename T>
T minimum(const T& lhs, const T& rhs)
{
    return lhs < rhs ? lhs : rhs;
}

 

템플릿 특수화, 명시적 템플릿 등등 다양한 특성(?)이 존재한다

 

템플릿은 컴파일할 때, 타입만큼 코드가 복제된다.

컴파일 시에 특정 타입을 넣으면 그것이 구현된다(Compile-Time Polymorphism)

암시적 인터페이스를 만족하지 못하면 컴파일 에러가 난다

(실제로 코드 조각들이 만들어지지 않는다)

 

자료 구조(및 알고리즘)를 만들 때 정말 많이 쓰임

STL의 algorithm에는 거의 필수적으로 들어가 있다

 

게임에서의 예시

예시)
Factory(유닛을 만드는 건물)
템플릿을 안 쓰면
1. 하나하나 만든다
CreateUnit(Marine a);

2. 다형적으로 만든다
CreateUnit(eUnitType a);

CreateUnit // 함수 구현
{    switch (a)
    ...
}

템플릿을 쓰면 다음과 같이 된다
template<typename T>
CreateUnit();
CreateUnit<Marine>();

 

템플릿은 아니지만 예외 처리 관련 키워드

Try - Catch

ASSERT

Logger

 

SSS