[Basic C++] #55-2_템플릿 파라미터

2022. 7. 27. 11:07· 언어/Basic C++
목차
  1. [Basic C++] #55-2_템플릿 파라미터

[Basic C++] #55-2_템플릿 파라미터

C++의 템플릿 중 "템플릿 파라미터"에 대해 알아보겠습니다.

"전문가를 위한 C"의 11 항목, "템플릿을 이용한 제네릭 코드 작성"에 해당하는 내용입니다.

 

 


 

템플릿 파라미터
template <typename T>

 

템플릿 코드를 작성하기위해 우리는 "<>"안에 파라미터 목록들이 필요합니다.

이러한 파라미터 목록은 함수나 메서드의 파라미터 목록과 비슷합니다.

원하는 개수만큼 작성 할 수 있고, 꼭 "타입"이 아니어도 됩니다!

 

타입이 아닌(non-type) 템플릿 파라미터
template<typename T, size_t WIDTH, size_t HEIGHT>
class MyClass
{
public:
	MyClass();
	virtual ~MyClass();

	void setElementAt(size_t x, size_t y, const T& inElement);
	const T& getElementAt(size_t x, size_t y) const;

	// 템플릿 파라미터 목록 중 HEIGHT와 WIDTH를 반환하는 메서드
	size_t getHeight() const { return HEIGHT; }
	size_t getWidth() const { return WIDTH; }

private:
	T cells[WIDTH][HEIGHT];
};
// 1. 클래스 생성자 구현부
template <typename T, size_t WIDTH, size_t HEIGHT>
MyClass<T, Width, HEIGHT>::MyClass()
{
    //...
}

// 2. 클래스 멤버 메서드 구현부
template <typename T, size_t WIDTH, size_t HEIGHT>
void MyClass<T, WIDTH, HEIGHT>::setElementAt ( size_t x, size_t y, const T& inElement)
{
    //...
}

 

위에서 얘기했던 것처럼, 템플릿 파라미터는 꼭 "타입"이 아니어도 됩니다!

 

위 예제 코드는 템플릿 파라미터를 마치 함수의 인자처럼 사용하고 있습니다.

"MyClass" 클래스는 생성자를 통해 "Width" 혹은 "Height"를 결정하지 않고, 템플릿 인자로 받고 있습니다.

이처럼 템플릿 인자를 사용하면 컴파일 타임에 크기 값이 알려져 "최적화"에 유리하다고 합니다!

 

주의할 점은 템플릿 파라미터의 값이 달라지면 서로 다른 타입으로 취급됩니다.

예를 들면, MyClass< int, 10, 10 > 과 MyClass < int, 10, 11 >은 서로 다른 "타입"이 됩니다!

따라서, 앞선 두개의 객체들은 서로 대입하는 동작 등은 수행할 수 없겠죠.

 

 

템플릿 파라미터 목록 중 non-type 파라미터는 인스턴스화된 객체의 타입을 구분하게 하는 인자입니다.

 

 

템플릿 파라미터의 디폴트 값 설정
template< typename T = int, size_t WIDTH = 10, size_t HEIGHT = 10 >
class MyClass
{
    //...
};

MyClass <> myClass;    // 문제 없이 컴파일됩니다!
MyClass<int> myClass2;    // 역시, 문제 없습니다!
MyClass<int, 5> myClass3;    // 이것 또한 문제없습니다!

 

템플릿 파라미터는 위처럼 "디폴트 값"을 설정할 수 있습니다!

 

템플릿 클래스의 메서드의 구현부를 작성할 때, template 지정자에서는 디폴트 값을 생략할 수 있습니다!

 

 

 

'언어 > Basic C++' 카테고리의 다른 글

[Basic C++] #55-4_템플릿 클래스의 특수화, 특정 타입에 대한 템플릿 클래스  (0) 2022.07.28
[Basic C++] #55-3_템플릿 메서드, 이중 템플릿  (0) 2022.07.27
[Basic C++] #55-1_템플릿 개념 ~ 인스턴스화 대상 타입 제한  (0) 2022.07.23
[Basic C++] #54_STL 작업 알고리즘, for_each()  (0) 2022.07.20
[Basic C++] #53_STL 알고리즘, remove + erase, 옮기고 삭제하기  (0) 2022.07.19
  1. [Basic C++] #55-2_템플릿 파라미터
'언어/Basic C++' 카테고리의 다른 글
  • [Basic C++] #55-4_템플릿 클래스의 특수화, 특정 타입에 대한 템플릿 클래스
  • [Basic C++] #55-3_템플릿 메서드, 이중 템플릿
  • [Basic C++] #55-1_템플릿 개념 ~ 인스턴스화 대상 타입 제한
  • [Basic C++] #54_STL 작업 알고리즘, for_each()
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • DP
  • 최단 경로
  • BFS
  • 정렬
  • 기술 질문
  • programmers
  • stl
  • 알고리즘
  • 그래프
  • unreal
  • dfs
  • 트리
  • C++
  • set
  • BOJ
  • 우선순위 큐
  • Unreal Blueprint
  • 개발
  • 디자인 패턴
  • Effective C++

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Basic C++] #55-2_템플릿 파라미터
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.