(C++ : Template) template으로 factorial 만들기(template meta programming)

Posted by : at

Category : Cpp


template으로 factorial 만들기

template<int N> struct factorial
{
  enum { value = N * factorial<N-1>::value };
  // static constexpr int value = N * factorial<N-1>::value;
  // 아래도 동일한 표현이다.
};

// 재귀 종료를 위해 특스화 된 문법
template<> struct factorial<1>
{
  enum { value = 1 };
  // static constexpr int value = 1;
};

int main()
{
  int n = factorial<5>::value;
  // 컴파일 시간에 이 값이 결정됨을 기억하자. -> template meta programming이라 한다.
  cout << n << endl;
}

참고) constexpr

template<int N> struct check {};

// 컴파일타임에 결정이 됨.
constexpr int add(int a, int b)
{
  return a + b;
}

int main()
{
  int n = add(1, 2);
  check<add(1,2)> c;    // okay
  
  int n1 = 1;
  int n2 = 2;
  int nn = add(n1, n2);   // okay
  check<add(n1,n2)> c1;    // error
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links