Meta-Program

Meta-Program
프로그램을 만드는 프로그램

대부분의 프로그래밍 언어에서는 텍스트 파일을 읽고 특정 변환을 수행하는 프로그램을 작성할 수 있다.
C++에서는 컴파일하는 동안 계산하거나 변환하는 프로그램을 작성할 수 있다.
(계산 가능한 모든 것들을 C++의 컴파일 타임에 계산할 수 있다.)
최초의 메타 프로그래밍
// Erwin Unruh
template <int i> struct D{ D(void*); operator int(); };
template <int p, int i> struct is_prime{
enum{prim=(p==2) || (p%i) && is_prime<(i>2?p:0), i-1>::prim};
};
template <int i> struct Prime_print{
Prime_print<i-1> a;
enum{prim=is_prime<i, i-1>::prim};
void f(){ D<i> d=prim?1:0; a.f(); }
};
template <> struct is_prime<0, 0>{ enum{prim=1}; };
template <> struct is_prime<0, 1>{ enum{prim=1}; };
template <> struct Prime_print<1>{
enum{prim=0};
void f(){ D<1> d=prim?1:0; };
};
int main(void){
Prime_print<18> a;
a.f();
}