Simply put, a metaprogram is a program which generates or manipulates
program code. The ability to programmatically create software allows
programmers to work at a higher level of abstraction appropriate to the
problem domain, and allows the resulting code to be reconfigured without loss
of efficiency. Ever since generic programming was introduced to C++,
programmers have discovered myriad "template tricks" for manipulating
programs *as they are compiled*, effectively eliminating the barrier between
program and metaprogram. While the excitement generated by these
capabilities among C++ experts has reached the community at large, their
practical application remains out-of-reach for most programmers. This book
provides the neccessary foundation to make template metaprogramming
practical for everyone.
Table of Contents:
Preface.
Acknowledgments.
Making the Most of This Book.
1. Introduction.
Getting Started.
So What's a Metaprogram?
Metaprogramming in the Host Language.
Metaprogramming in C++.
Why Metaprogramming?
When Metaprogramming?
Why a Metaprogramming Library?
2. Traits and Type Manipulation.
Type Associations.
Metafunctions.
Numerical Metafunctions.
Making Choices at Compile Time.
A Brief Tour of the Boost Type Traits Library.
Nullary Metafunctions.
Metafunction Definition.
History.
Details.
Exercises.
3. A Deeper Look at Metafunctions.
Dimensional Analysis.
Higher-Order Metafunctions.
Handling Placeholders.
More Lambda Capabilities.
Lambda Details.
Details.
Exercises.
4. Integral Type Wrappers and Operations.
Boolean Wrappers and Operations.
Integer Wrappers and Operations.
Exercises.
5. Sequences and Iterators.
Concepts.
Sequences and Algorithms.