What I'm reading now: "C++ Template Metaprogramming"
I'm currently reading "C++ Template Metaprogramming". It's off to a great start.
The basic idea (so far) is that:
You can write entire algorithms / programs in C++ templates, which are then executed as the compiler instantiates the template.
There is a discipline, structure, organization to these programs.
The template programs are generally recursive and heavily use template specialization for the base case.
Here's a simple example of writing Factorial like this.
// Simple demo of writing Factorial via a template #include "stdafx.h" // Recursive case: Factorial(N) = Factorial(N-1) * N template <int N> struct Factorial { public: static const int value = Factorial<N-1>::value * N; }; // Use Template Specialization for base case: Factorial(1) = 1 template <> struct Factorial<1> { static const int value = 1; }; void _tmain(int argc, _TCHAR* argv[]) { int v = Factorial<5>::value; printf("%d\n", v); // prints 120 }
In this case, Factorial<5> is completely computed at compile time. Code generated for Factorial<5> is:
int v = Factorial<5>::value;
004113AE mov dword ptr [v],78h // 78h = 120 = 5 factorial
printf("%d\n", v); // prints 120
The Boost libraries heavily make use of these techniques. And it will certainly be helpful in fully appreciating what happens in STL.
Comments
Anonymous
December 05, 2006
obligatory snide lisp/scheme macro commentAnonymous
December 05, 2006
I'm always so conflicted with templates. On one hand, you have STL. On the other hand, you have ATL...I guess it comes down to the fundamental truth: Just because you can do something doesn't mean that you should.Anonymous
December 05, 2006
Another good book in the series is Andrei Alexandrescu's Modern C++ Design, which presents some of these template metaprogramming techniques and others along with design patterns (C++ and GoF). Some of his ideas were also incorporated into Boost, but the book's result is a library called Loki, which can be found here: http://loki-lib.sourceforge.net/Anonymous
December 13, 2006
When people are asking for a debugger for language X, practically it means that the usage of language