The C++
|
Titles in the SeriesAccelerated C++: Practical Programming by Example , Andrew Koenig and Barbara E. Moo Applied C++: Practical Techniques for Building Better Software , Philip Romanik and Amy Muntz The Boost Graph Library: User Guide and Reference Manual , Jeremy G. Siek, Lie-Quan Lee, and Andrew Lumsdaine C++ In-Depth Box Set , Bjarne Stroustrup, Andrei Alexandrescu, Andrew Koenig, Barbara E. Moo, Stanley B. Lippman, and Herb Sutter C++ Network Programming, Volume 1: Mastering Complexity Using ACE and Patterns , Douglas C. Schmidt and Stephen D. Huston C++ Network Programming, Volume 2: Systematic Reuse with ACE and Frameworks , Douglas C. Schmidt and Stephen D. Huston Essential C++ , Stanley B. Lippman Exceptional C++: 47 Engineering Puzzles, Programming Problems, and Solutions , Herb Sutter Modern C++ Design: Generic Programming and Design Patterns Applied , Andrei Alexandrescu More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Solutions , Herb Sutter For more information, check out the series Web site at http://www.awprofessional.com/series/indepth/ |
Preface
This book is about applying C++ to solve the problems inherent in building commercial software. Those of you who have worked on engineering
Commercial software
is delivered to customers (internal or external) who will rely on the interface you provide. It may be in an embedded system, or it may be a software library or application for standard platforms. No matter where it ultimately runs, the software must be released at a particular time with all of the features it needs to be successful in the market. It is software that is built by one
Getting a group of engineers to build a complex piece of software and deliver it on time with full functionality is one of software engineering's biggest challenges. An even bigger challenge is building that same software in such a way that it can be handed off to others to extend and maintain. The C++ techniques and practical tips we have compiled into this book have been used repeatedly to accomplish just this. In many cases, we draw a distinction between the ideal solution and the practical one. We try to provide discussions of the trade-offs so that you can make informed decisions, and we tell you what our criteria are when selecting one method over another. We leave it to you to determine what works best in your application. Our goal is to share practical techniques that we have found made our commercial software efforts much more successful than they
For those of you who prefer to learn by looking at the code, you will find plenty of examples. We
We start with a simple, although inadequate, application that generates thumbnail images. We use this application in our prototyping phases to experiment with different C++ design and implementation techniques. The application is simple to understand and the results of applying various C++ techniques are immediately obvious, making it a nice candidate for prototyping. This simple thumbnail image generator has many of the same inherent problems that our final image framework will have to address. The application is:
Upon completion, you will have an image processing framework for manipulating your digital images and a practical toolkit of C++ utilities. The framework will provide efficient image storage and memory usage, routines for manipulating your digital images (like edge sharpening, image resizing, noise reduction, edge detection, image subtraction, and more), interfaces to third-party software, and many performance optimizations. It will be a useful piece of software that has practical design and implementation features, so that you could even use it as the basis of a commercial software product.
The complete source code for the thumbnail generator application, the
|