본문 바로가기

Programming

C++ Meta-Programming

C++ Meta-Programming

C++ 메타 프로그래밍은 컴파일 시에 메타 데이타를 이용하여 값 또는 타입의 연산을 하는 기법이다.


1. 값(value)의 연산

프로그램 중에 10! 값을 사용할 필요가 있다고 하자. 이 경우, 여러 가지 방법을 사용할 수 있다. 

(1) 직접 계산

가장 간단한 방법은 10! 값을 계산기로 계산하여 넣어 주는 것이다.

int n = 3628820 ; //10!


(2) 함수의 사용

팩토리알을 계산하는 함수를 사용할 수도 있다.

int n = Factorial(10) ;
...

int Factorial(int n)
    return n == 1 ? 1 : n * Factorial(n-1); 

이 방법은 다른 팩토리알 값도 계산할 수 있다는 이점이 있지만 런타임 시에 계산되므로 실행시간을 잡아 먹게 된다, 상수 계산을 런타임에서 하는 방식은 잊기로 하자.


(3) 템플릿의 사용

템플릿을 사용하여 컴파일 시에 상수를 계산할 수 있다.

int n = Factorial<10>::value ;
...

template <int N>
struct Factorial
{
    static int const value = N * Factorial<N-1>::value; 
};

template <> 
struct Factorial<1>
    static int const value = 1; 
}; 

템플릿을 사용한 위 코드에서 팩토리알 값은 컴파일 시에 계산되어 대입되며 컴파일 후의 코드는 (1)번과 같이 직접 계산한 경우와 같게 된다.

템플릿을 사용하여 상수를 계산하는 위의 예제는 단지 예시용이며 상수 계산을 위해 메타 프로그래밍을 하는 경우는 매우 드물다. 실제 메타프로그래밍의 파워는 타입의 연산이 가능하다는 데에 있다.


2. 타입(type)의 연산




'Programming' 카테고리의 다른 글

C++ Meta-Programming  (0) 2010.01.31
Maemo 5 개발환경  (0) 2010.01.09
QT 기반으로 새로 태어나는 Maemo 6  (0) 2010.01.03
Closure in C++  (2) 2009.10.03
안드로이드 플랫폼에서 Clojure 실행  (0) 2009.06.14
Clojure Data Structure  (0) 2009.05.22