C++ 템플릿(Template)의 기초를 학습하는 모듈입니다. 함수 템플릿과 클래스 템플릿을 통해 제네릭 프로그래밍을 경험합니다.
주요 학습 포인트:
- 함수 템플릿 (Function Templates)
- 클래스 템플릿 (Class Templates)
- 템플릿 특수화 (Template Specialization)
- 제네릭 프로그래밍 (Generic Programming)
- 타입 매개변수 (Type Parameters)
ex00: Start with a few functions
- swap, min, max 함수 템플릿 구현
- 모든 타입에 대해 작동
- 템플릿 함수의 기본 문법 학습
ex01: Iter
- iter 함수 템플릿
- 배열과 함수 포인터를 받아 각 요소에 함수 적용
- 템플릿 매개변수로 배열 타입과 함수 전달
ex02: Array
- Array 클래스 템플릿
- 동적 배열 구현
- 인덱스 연산자 오버로딩 ([])
- 범위 검사 및 예외 처리
- 깊은 복사 구현
함수 템플릿
- 타입을 매개변수로 받아 여러 타입에 대해 동일한 로직 수행
- swap, min, max 등 기본 연산을 모든 타입에 적용 가능
- 컴파일러가 사용 시점에 타입을 추론하여 함수 생성
iter 함수 템플릿 (ex01)
- 배열의 각 요소에 함수를 적용하는 제네릭 함수
- 배열 타입과 함수 타입을 템플릿 매개변수로 받음
- 함수 포인터를 통해 다양한 연산 적용 가능
클래스 템플릿 (ex02)
- 타입에 독립적인 동적 배열 클래스 구현
- 인덱스 연산자 오버로딩으로 배열처럼 사용
- 범위 검사를 통한 안전한 접근 보장
- 깊은 복사로 독립적인 배열 관리
템플릿 정의 위치
- 템플릿은 헤더 파일에 선언과 정의를 함께 작성
- 컴파일 타임 인스턴스화를 위해 구현 코드가 필요
- 각 타입별로 별도의 함수/클래스가 생성됨
타입 추론
- 컴파일러가 인자의 타입을 보고 자동으로 템플릿 타입 결정
- 명시적으로 타입을 지정할 수도 있음
- 타입 추론 실패 시 명시적 지정 필요
c++ -Wall -Wextra -Werror -std=c++98 *.cpp -o program각 exercise에서:
make- 템플릿 정의: 헤더 파일(.hpp)에 선언과 정의 모두 작성
- 타입 제약: 템플릿 타입은 사용되는 연산자를 지원해야 함
- min/max:
<,>연산자 필요 - swap: 복사 생성자, 대입 연산자 필요
- min/max:
- 깊은 복사: 동적 메모리 사용 시 필수
- 범위 검사: 인덱스 접근 시 항상 검증
- const 정확성: const 멤버 함수와 const 참조 활용
- 예외 안전성: 메모리 할당 실패, 범위 초과 등 처리