템플릿 메타 프로그래밍

hyoooooooooopark·2022년 7월 14일
0

ft_containers

목록 보기
1/2

템플릿 메타 프로그래밍 ( Template Meta Programming, TMP)
: 타입을 이용해 컴파일 타임에 생성되는 코드로 프로그래밍 하는 것
*템플릿을 이용하면 타입 자체에 어떠한 값을 부여할 수 있고(제네릭 프로그래밍 이용), 그 타입을 가지고 연산도 가능

일반화 프로그래밍 (generic programming)(제너릭 프로그래밍)
:타입이 인자인것처럼 사용

*템플릿에는 타입뿐만이 아닌 값들도 올 수 있다.

#include <iostream>

template <typename T, unsigned int N>
class Array {
  T data[N];

 public:
  // 배열을 받는 레퍼런스 arr
  Array(T (&arr)[N]) {
    for (int i = 0; i < N; i++) {
      data[i] = arr[i];
    }
  }

  T* get_array() { return data; }

  unsigned int size() { return N; }

  void print_all() {
    for (int i = 0; i < N; i++) {
      std::cout << data[i] << ", ";
    }
    std::cout << std::endl;
  }
};

int main() {
  int arr[3] = {1, 2, 3};

  // 배열 wrapper 클래스
  Array<int, 3> arr_w(arr);

  arr_w.print_all();
}
	Array<int, 3> arr_w(arr);

템플릿 메타 프로그래밍을 사용하는 이유
: 컴파일 타임에 모든 연산이 끝나므로 실행속도가 빠르다.(컴파일 타임은 늘어남)
*컴파일 타임에 연산하기 때문에 디버깅이 힘들다.(구현도 굉장히 어려움)

의존타입 (dependent type)
:템플릿의 인자에 따라 타입이 달라질 수 있는 것
타입을 의도 한다면 반드시 typename 키워드를 붙여줘야함
*의존 값의 경우 컴파일러는 식별자를 기본적으로 값으로 생각함

출처 : https://modoocode.com/221
: https://modoocode.com/222

profile
슈뢰딩거의 개발 : 정답일 수도 아닐 수도 있습니다.

0개의 댓글