C++ 탬플릿 프로그래밍

2021. 12. 22. 00:22·C++
반응형

형태

template <class <type_name>> <function_declaration>;

template <typename <type_name>> <function_declaration>;

 

typename과 class 차이? -> 없다 그냥 typename을 사용하면 된다.

 

템플릿을 인스턴스화 할 때마다 컴파일러가 내부적으로 코드를 생성

템플릿에 넣는 자료형 가지수에 비례하여 exe파일 크기 증가

컴파일 타임 도중 다형성 부여가 가능하다.

STL을 돌게하는 주된 프로그래밍 방식

코드를 중복 작성할 필요가 없어졌다.

 

#define MAX 3

const int MAX = 3;

static const int MAX = 3;에 대한 해결 방안

=>

class 이름

{

private:

enum { MAX = 3 }; //상수화 된다.

int Arr[MAX];

}

 

클래스 위에 template을 선언하여 클래스템플릿 생성이 가능하다.

선언

template<typename T>

class MyArr{...}

생성자

template<typename T>

MyArr<T>::MyArr(){...}

 

템플릿 프로그래밍을 하기위해서는 헤더파일에서 구현해야한다.

->cpp 안에 구현하면 컴파일러가 컴파일 할 때 함수 구현부를 찾지 못하여 에러를 발생

 

매개변수 종류 다른 여러가지

template <typename T, typename U>  

 

namespace를 지정하고 함수에 템플릿을 지정하여 사용해도 된다.

ex) Math 사용(namespace에 있어서 따로 변수선언이 필요 없이 사용이 가능하다)

 

템플릿 특수화

특정한 템플릿 매개변수를 받도록 템플릿 코드를 커스터마이즈할 수 있다.

ex) std::vector

template <class T, class Allocator>

class std::vector<T,Allocator>{} // 모든 형을 받는 제네릭 vector

 

template <class Allocator>

class std::vector<bool, Allocator>{} // bool을 받도록 특수화된 vector

 

템플릿 특수화는 거의 쓰이지 않지만 가끔 쓰여야 하는 경우가 있다.

전체 다 매개변수가 특수화된다면 template<>를 선언

매개변수 일부분만 특수화가 된다면 template<템플릿 되는 매개변수>를 선언

 

장점 : 컴파일 도중 다형성 부여 가능

단점 : 코드 읽기가 어렵다

 

컨테이너인 경우 템플릿 프로그래밍은 좋다.

컨테이너가 아닌 경우 서넛 이상 자료형을 다루면 템플릿 프로그래밍이 좋다.

단, 두 가지 정도라면 그냥 클래스 2개를 만드는게 더 적합하다.

반응형
저작자표시 (새창열림)

'C++' 카테고리의 다른 글

C++ 11/14/17/...의 키워드  (0) 2021.12.24
C++ STL 알고리듬  (0) 2021.12.22
C++ 15일차  (0) 2021.07.01
C++ 14일차  (0) 2021.06.30
C++ 13일차  (0) 2021.06.28
'C++' 카테고리의 다른 글
  • C++ 11/14/17/...의 키워드
  • C++ STL 알고리듬
  • C++ 15일차
  • C++ 14일차
숯불돼지왕갈비
숯불돼지왕갈비
  • 숯불돼지왕갈비
    게임 개발 공부기
    숯불돼지왕갈비
  • 전체
    오늘
    어제
    • 분류 전체보기 (302)
      • 학교수업 (165)
      • 취업강의 (6)
      • C++ (49)
        • 코딩 테스트 (4)
      • Unreal Engine 5 (25)
        • MMORPG 개발 (25)
      • Unreal Engine 4 (44)
        • Omak Project (3)
        • Unreal Engine 4 개발일지 (9)
        • Unreal Engine 4 (32)
      • Unity (1)
        • 개발 일지 (1)
      • 수학 (3)
        • 소프트웨어 공학용 수학 (3)
      • DirectX 11 (4)
      • 게임 디자인 패턴 (2)
      • 포트폴리오 (1)
      • 자격증 (1)
        • 정보처리기사 (0)
        • SQLD (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
숯불돼지왕갈비
C++ 탬플릿 프로그래밍
상단으로

티스토리툴바