on Sun Jul 20 2008, Zeljko Vrba
No, I have not used MPL. Yes, I've read the introduction and motivation (the example with dimensional algebra), and it seems like a rather niche application. Heck, I've even tried to read the MPL book and the question mark in my head just got bigger, not smaller. It is a reference book about manipulating typelists, but it does not say what typelists are good for.
"C++ Template Metaprogramming" is not intended to be a reference book about manipulating typelists at all. Did you start reading from the beginning of the book, or did you skip to chapter 3 or so? The introduction lays some important conceptual foundations about what metaprogramming is all about. Typelists (not even a term we use in the book) are merely one means to reaching the many ends of metaprogramming.
I haven't been able to find a use for MPL myself. From my POV, it's a black magic used by library writers to provide "nice" library interfaces,
That's a reasonable point of view to take if you don't want to do template metaprogramming and just want to be a consumer of its benefits. However, if you're trying to use fusion beyond the most basic operations, well, you're doing template metaprogramming. Understanding MPL provides a good foundation for understanding fusion, and in fact fusion uses enough MPL idioms that it would be very difficult to learn any other way.
and which spits out hundreds (or megabytes if the user is unlucky) of error messages if the user does something wrong.
Welcome to C++ template instantiation. The same goes for just about any template library (e.g. STL).
And the basic question remains unanswered for me: How does MPL (or fusion for that matter) help in making more maintainable code? More maintainable as in:
- less lines of code - code that is easier to understand - code that is easier to inspect at runtime with a debugger - code that can be modified by a C++ developer who does not know every dark corner of the template language - code that is written faster (i.e. takes less time to get a successful compilation) and works correctly the first time it is written
Did you look at the binary number example in the first pages of our book? It addresses many of the above questions.
How are fusion/MPL useful to an *application* programmer, not a library developer?
Ah. Well, some people think every application programmer should think of himself as a library developer. If you're writing code that will be re-used by your colleagues, or even by yourself, that code is essentially library code. However, you do have a point: fusion, MPL, and templates in general are useful for building flexible, generalized components that can be configured for different applications without loss of efficiency. If you are building one-off code, you probably don't have much use for them. -- Dave Abrahams BoostPro Computing http://www.boostpro.com