반응형
템플릿 프로그래밍
java와 C#에서의 제너렉 메서드 / 클래스와 유사합니다. STL 컨테이너 또한 템플릿으로 구성되어 있습니다. 덕분에 코드를 자료형마다 중복으로 장석하지 않아도 됩니다.
함수 템플릿
template <class T>
T Add(T a, T b)
{
// ...
}
template <typename T>
T Add(T a, T b)
{
//
}
함수 템플릿을 호출할 때 템플릿 매개변수를 생략할 수 있습니다.
typename vs class
차이가 무엇일까요? 사실상 큰 차이는 없다고 합니다. 그냥 typename을 사용해도 무방합니다.
템플릿은 어떻게 동작할까요?
템플릿을 인스턴스화할 때마다 컴파일러가 내부적으로 코드를 생성합니다. 템플릿에 넣는 자료형 가짓수에 비례해서 exe 파일 크기가 증가합니다.
예시
class MyIntArray
{
public:
bool Add(int data);
MyIntArray();
private:
enum{ MAX = 3 };
int mSize;
int mArray[MAX];
};
int main()
{
MyIntArray scores;
scores.Add(10);
scores.Add(20);
scores.Add(30);
scores.Add(40);
return 0;
}
컴파일러가 Main.cpp을 컴파일할 떄 , MyArray.cpp를 못찾습니다. MyArray.h를 통해서 오직 MyArray 틀래스 선언만 볼 수 있습니다. 따라서, 컴파일러가 MyArray<int>를 만들어 줄 수 없을 떄가 있습니다.
그래서 보통, 템플릿 프로그래밍을 한 구현체를 헤더파일에 구현하는게 기본적인 해결 방법입니다.
클래스 템플릿
개체를 선언할 떄 템플릿 매개변수를 명시해야 합니다. 왜냐하면 컴파일러는 어떤 타입의 클래스를 만들어 줄지 모르기 때문입니다.
반응형
'SW > C++' 카테고리의 다른 글
C++ : 템플릿 활용 : 고정형 사이즈 벡터 만드는 예제 (0) | 2020.04.22 |
---|---|
C++ : 클래스 템플릿 : 예제, 사용법, 구현 방법, 추천 (0) | 2020.04.21 |
C++ : 가변 인자 템플릿 : 장점, 사용법, 예제, 개념 (0) | 2020.04.19 |
C++ : module : 모듈 시스템 개요, 사용 방법, 장단점 (0) | 2020.04.18 |
C++ : filesystem : 기본 예제, 사용법, 주의 사항 (0) | 2020.04.17 |