Programming Books C Java PHP Python Learn more Browse Programming Books
C++ Template Metaprogramming and over one million other books are available for Amazon Kindle. Learn more
Qty:1
  • List Price: $54.99
  • Save: $10.18 (19%)
Only 11 left in stock (more on the way).
Ships from and sold by Amazon.com.
Gift-wrap available.
FREE Shipping on orders over $35.
Used: Very Good | Details
Condition: Used: Very Good
Comment: Crisp, attractive copy with no markings to text. Ships directly to you with tracking from Amazon's warehouse - fast, secure and FREE WITH AMAZON PRIME.
Access codes and supplements are not guaranteed with used items.
Trade in your item
Get a $9.51
Gift Card.
Have one to sell? Sell on Amazon
Flip to back Flip to front
Listen Playing... Paused   You're listening to a sample of the Audible audio edition.
Learn more
See this image

C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond Paperback – December 20, 2004

ISBN-13: 978-0321227256 ISBN-10: 0321227255

Buy New
Price: $44.81
36 New from $38.00 32 Used from $26.42
Amazon Price New from Used from
Kindle
"Please retry"
Paperback
"Please retry"
$44.81
$38.00 $26.42
Free%20Two-Day%20Shipping%20for%20College%20Students%20with%20Amazon%20Student


Frequently Bought Together

C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond + Modern C++ Design: Generic Programming and Design Patterns Applied + C++ Templates: The Complete Guide
Price for all three: $145.04

Buy the selected items together

NO_CONTENT_IN_FEATURE

Save up to 90% on Textbooks
Rent textbooks, buy textbooks, or get up to 80% back when you sell us your books. Shop Now

Product Details

  • Paperback: 400 pages
  • Publisher: Addison-Wesley Professional (December 20, 2004)
  • Language: English
  • ISBN-10: 0321227255
  • ISBN-13: 978-0321227256
  • Product Dimensions: 9.1 x 7.5 x 0.8 inches
  • Shipping Weight: 1.5 pounds (View shipping rates and policies)
  • Average Customer Review: 3.9 out of 5 stars  See all reviews (15 customer reviews)
  • Amazon Best Sellers Rank: #502,740 in Books (See Top 100 in Books)

Editorial Reviews

About the Author

David Abrahams is a founding member and moderator of the Boost C++ library development group. Dave has been an ANSI/ISO C++ committee member since 1996, where he is best known for contributing a theory, specification, and implementation of exception handling for the C++ standard library. His company, Boost Consulting, provides Boost-related support and development services and professional training in the art of software construction.

Aleksey Gurtovoy is a technical lead for MetaCommunications and a contributing member of the Boost C++ community. Aleksey is the original author of the Boost Metaprogramming Library. He has been working with C++ since 1993, and holds a M.S. degree in computer science from Krasnoyarsk Technical State University, Russia.



Excerpt. © Reprinted by permission. All rights reserved.

In 1998 Dave had the privilege of attending a workshop in Generic Programming at Dagstuhl Castle in Germany. Near the end of theworkshop, a very enthusiastic Kristof Czarnecki and Ullrich Eisenecker (of Generative Programming fame) passed out a few pages of C++ source code that they billed as a complete Lisp implementation built out of C++ templates. At the time it appeared to Dave to be nothing more than a curiosity, a charming but impractical hijacking of the template system to prove that you can write programs that execute at compile time. He never suspected that one day he would see a role for metaprogramming in most of his day-to-day programming jobs. In many ways, that collection of templates was the precursor to the Boost Metaprogramming Library (MPL): It may have been the first library designed to turn compile-time C++ from an ad hoc collection of "template tricks" into an example of disciplined and readable software engineering. With the availability of tools to write and understand metaprograms at a high level, we've since found that using these techniques is not only practical, but easy, fun, and often astoundingly powerful.

Despite the existence of numerous real systems built with template metaprogramming and the MPL, many people still consider metaprogramming to be other-worldly magic, and often as something to be avoided in day-to-day production code. If you've never done any metaprogramming, it may not even have an obvious relationship to the work you do. With this book, we hope to lift the veil of mystery, so that you get an understanding not only of how metaprogramming is done, but also why and when. The best part is that while much of the mystery will have dissolved, we think you'll still find enough magic left in the subject to stay as inspired about it as we are.

Making the Most of This Book

The first few chapters of this book lay the conceptual foundation you'll need for most everything else we cover, and chapters generally build on material that has come before. That said, feel free to skip ahead for any reason—we've tried to make that possible by providing cross-references when we use terms introduced earlier on.

Chapter 10, Domain-Specific Embedded Languages, is an exception to the rule that later chapters depend on earlier ones. It focuses mostly on concepts, and only appears late in the book because at that point you'll have learned the tools and techniques to put Domain-Specific Embedded Languages into play in real code. If you only remember one chapter by the time you're done, make it that one.

Near the end of many chapters, you'll find a Details section that summarizes key ideas. These sections usually add new material that deepens the earlier discussion,* so even if you are inclined to skim them the first time through, we suggest you refer back to them later.

We conclude most chapters with exercises designed to help you develop both your programming and conceptual muscles. Those marked with asterisks are expected to be more of a workout than the others. Not all exercises involve writing code—some could be considered "essay questions"—and you don't have to complete them in order to move on to later chapters. We do suggest you look through them, give a little thought to how you'd answer each one, and try your hand at one or two; it's a great way to gain confidence with what you've just read.

Supplementary Material

This book comes with a companion CD that supplies the following items in electronic form

  • Sample code from the book.
  • A release of the Boost C++ libraries. Boost has become known for high-quality, peer-reviewed, portable, generic, and freely reusable C++ libraries. We make extensive use of one Boost library throughout the book—the Boost Metaprogramming Library (MPL)—and we discuss several others.
  • A complete MPL reference manual, in HTML and PDF form.
  • Boost libraries discussed in this book that are not yet part of an official release.

The index.html file at the top level of the CD will provide you with a convenient guide to all of its contents. Additional and updated material, including the inevitable errata, will appear on the book's Web site: http://www.boost-consulting.com/mplbook. You'll also find a place there to report any mistakes you might find.

Trying It Out

To compile any of the examples, just put the CD's boost 1 32 0/ directory into your compiler's #include path.

The libraries we present in this book go to great lengths to hide the problems of less-than-perfect compilers, so it's unlikely that you'll have trouble with the examples we present here. That said, we divide C++ compilers roughly into three categories.

      A. Those with mostly conforming template implementations. On these compilers, the examples and libraries "just work." Almost anything released since 2001, and a few compilers released before then, fall into this category.
      B. Those that can be made to work, but require some workarounds in user code.
      C. Those that are too broken to use effectively for template metaprogramming.

Appendix D lists the compilers that are known to fall into each of these categories. For those in category B, Appendix D refers to a list of portability idioms. These idioms have been applied to the copies of the book's examples that appear on the accompanying CD, but to avoid distracting the majority of readers they don't appear in the main text.

The CD also contains a portability table with a detailed report of how various compilers are doing with our examples. GCC is available free for most platforms, and recent versions have no problems handling the code we present here.

Even if you have a relatively modern compiler from category A, it might be a good idea to grab a copy of GCC with which to cross-check your code. Often the easiest way to decipher an inscrutable error message is to see what some other compiler has to say about your program. If you find yourself struggling with error messages as you try to do the exercises, you might want to skip ahead and read the first two sections of Chapter 8, which discusses how to read and manage diagnostics.

And now, on to C++ Template Metaprogramming!

— Dave and Aleksey

* We borrowed this idea from Andrew Koenig and Barbara Moo's Accelerated C++: Practical Programming By Example.



0321227255P12142004

More About the Author

Discover books, learn about writers, read author blogs, and more.

Customer Reviews

I am not a meta programming expert, however I learned a lot from this great book.
Cumhur Guzel
This book might have been about how to design an mpl like library, but it makes no attempt to address this issue.
Dash Riprock
The authors take a very advanced complex topic and break it down to comprehensible chunks.
T. Dobroth

Most Helpful Customer Reviews

28 of 30 people found the following review helpful By Beman Dawes on December 30, 2004
Format: Paperback
This is a really interesting book. The template metaprogramming technical topics covered are extremely advanced, and right at the leading edge of C++ library development, yet the step-by-step presentation makes the material understandable even to intermediate programmers. Since the book draws its examples from code that works with the Boost libraries (supplied on a CD), readers can try the examples and play around with them to see how they work.

Some of the libraries discussed (Boost Type Traits, Boost Bind) are well along to becoming part of the C++ standard via a library technical report, so they will eventually become available to every C++ programmer. The bulk of the book is devoted to the Boost Metaprogramming Library, which packages up a lot of advanced techniques into accessible form.

One issue with template metaprogramming is that compile times can get out of hand. The book includes an appendix with hints on avoiding the problem, together with test timings for a half-dozen popular compilers. I really like the timings; too many other authors make assertions about efficiency without supporting data.

I would guess that this book will be of interest to intermediate and advanced C++ programmers interested in library development. And less interesting to beginning programmers, or programmers who never package up their creations into libraries.
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
43 of 50 people found the following review helpful By Andrew J. Lusk on April 25, 2006
Format: Paperback
This book is called "C++ Template Metaprogramming" but it should be called "Boost MPL API Reference." The first portion of this book covers the basics of template metaprogramming fairly well, but what I wanted the rest of the book to cover were both advanced techniques and real-world applications. What I got was material on how to use the Boost metaprogramming library. This book mostly covers just that library, and the various templates that it offers, but what I felt the book should have provided was not only how the more interesting parts of the MPL were implemented, but also interesting applications of the MPL where some interesting algorithm was made possible by template metaprogramming. I can look up the MPL reference docs online, thank you very much.

To summarize - this is a pretty good introduction to template metaprogramming, but seems to be suited for the unlikely position of someone who wants or needs to use this technique, but isn't academically interested in it, and so mainly needs a walkthrough of the set of standard functions available as part of the MPL.

This book is a bad choice for those interested in template metapgramming and wondering if it might help them, but want to learn more about it and its applications first.
3 Comments Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
19 of 21 people found the following review helpful By G. Powell on January 20, 2005
Format: Paperback Verified Purchase
This book describes the boost MPL library. Its a very useful guide to this library and it includes enough examples to walk you through how to use it.

Secondly the book explains Meta-programming. This is a new concept to a lot of C++ programmers and old hat to LISP programmers. The C++ pre-compiler is constrained to integral types as constraints. But there are a host of tricks you can use within that constraint to build libraries that adapt to their calling structure. Thus generating code that is as efficient as hand written. Of course with your compiler, your milage may vary.

The other great thing about using this library, MPL, is that where you would write repeticious template code for every parameter in a template'd library like Tuples, you can automate with it with MPL.

Meta programming is a pretty new concept within the C++ community and this book will give us a common language to talk about it. There are other resources on the net, but this book pulls them together.

Highly recommended for expert C++ programmers, C++ Library writers and intermediate programmers study'ing to become experts. If you finished Andrei's book, "Modern C++ Design", this is a great next book to buy and own.
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again
7 of 8 people found the following review helpful By John Wiegley on October 18, 2010
Format: Paperback
This was a pivotal book for me. I'd been working with C++, both as a programmer and a compiler writer, for almost 20 years. Yet despite an intimate familiarity with templates, the notions of template metaprogramming had always eluded me. By chapter 3 of this book, however, it felt as though a heavy curtain had been lifted. I actually became excited to wake up each day at the thought of reading the next chapter! Imagine that, from a C++ book.

The material is well-paced, lucidly written, and doesn't stray into minutae any longer than necessary. I would recommend it to anyone who wants to find out more about applying metaprogramming techniques to their own code. I'm already thinking of news ways I can use it. The only caveat I would mention is that your background will in large part determine this book's value to you. Coming from a C++ background, and lately having an intense interest in Haskell, I found many of this book's points "popped out" at me, showing connections between runtime C++ and compile-time functional programming (in the strange meta-language that is compile-time C++). But had I not had that prior experience, and been struggling with the very issues this book solves, some of it may not have had as great an impact. Be ready to do more research if you find the material a bit rough going. There are some profound implications between its pages that may not be obvious at first, but they're there.
Comment Was this review helpful to you? Yes No Sending feedback...
Thank you for your feedback. If this review is inappropriate, please let us know.
Sorry, we failed to record your vote. Please try again

Customer Images

Most Recent Customer Reviews


What Other Items Do Customers Buy After Viewing This Item?