#include <iostream>
template <int N> struct X {
enum {result = 2 * X<N-1>::result};};
template <> struct X<0> {
enum {result = 1};};
int main() {
std::cout << X<16>::result << std::endl;
return 0;
}
This is an example of metaprogramming with C++ templates. The code would be more clear if I changed the "X" to "Power". At the 1994 C++ Standardization Committee Erwin Unruh showed that compilers can do more complex calcuations. It was latter shown that C++ Template Metaprogramming is Turing Complete, meaning that it can compute anything that is computable. This is in theory. In practice, the C++ Standard recommends 17 levels of recursion. The above code uses 16. For a more detail on Template Metaprogramming see: http://en.wikipedia.org/wiki/Template_metaprogramming
Reference: C++ Templates

No comments:
Post a Comment