Chapter 2. C++ Metaprogramming in Practice

Let’s imagine that you are responsible for the construction—from the ground up—of a brand new module in a big weather prediction system. Your task is to take care of the distribution of complex computations on a large computing grid, while another team has the responsibility for the actual computation algorithms (in a library created two decades previously).

We will see in this chapter what kinds of problems arise when you try to interface two bricks that were created 20 years apart, examine the typical approaches, and see if the template metaprogramming approach brings any benefit.

A Typical Code Maintenance Assignment

After two years of development, your distributed weather system is at last done! You’ve been very thorough in applying modern C++ principles all along, and took advantage of pass-by-value everywhere you could. You are happy with the performance, the software is now stable, and you’ve made the design as sound as possible given the time you had.

But now, you need to interface with “the Thing,” aka “The Simulation Library of Awesomeness,” or SLA for short.

The SLA was designed in the 1990s by developers who have now gone insane or missing. Every time you install the SLA on a system, it is no longer possible to run any other kind of software without having a team of senior system administrators perform a week-long ritual to cleanse the machine.

Last but not least, the SLA only believes in one god, and that god is The Great ...

Get Practical C++ Metaprogramming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.