...
- Examples
We'll look at a few examples of template metaprogramming in this lesson.
// templatePrimeNumber.cpp// Prime number computation by Erwin Unruhtemplate <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; };};#ifndef LAST#define LAST 18#endifint main() { Prime_print<LAST> a; a.f();}
This is the original prime number program by Erwin Unruh, which was the starting point of template metaprogramming. Current compilers will not produce ...