API Design for C++ book cover

API Design for C++

The design of application programming interfaces can affect the behavior, capabilities, stability, and ease of use of end-user applications. With this book, you will learn how to design a good API for large-scale long-term projects. With extensive C++ code to illustrate each concept, API Design for C++ covers all of the strategies of world-class API development. Martin Reddy draws on over fifteen years of experience in the software industry to offer in-depth discussions of interface design, documentation, testing, and the advanced topics of scripting and plug-in extensibility. Throughout, he focuses on various API styles and patterns that will allow you to produce elegant and durable libraries.


All software engineers developing C++ code to be used by other developers, whether via APIs, libraries, device drivers, or other reusable components.

Paperback, 472 Pages

Published: February 2011

Imprint: Morgan Kaufmann

ISBN: 978-0-12-385003-4


  • Martin Reddy draws from his experience on large scale, collaborative software projects to present patterns and practices that provide real value to individual developers as well as organizations. API Design for C++ explores often overlooked issues, both technical and non- technical, contributing to successful design decisions that produce high quality, robust, and long-lived APIs. - Eric Gregory, Software Architect, Pixar Animation Studios

    "Intended for programmers with intermediate to advanced skills in the C++ programming language, this guide to the building of useful and robust application programming interfaces (APIs) provides practical instruction for software engineers developing systems on which downstream software engineers depend. The work provides a methodical approach to API design covering solution based API design, performance, versioning, documentation, testing, scripting, extensibility and libraries. The work includes numerous illustrations and code examples and access to additional online resources is provided. Reddy is a software development consultant."--Book News, Reference & Research


  • Foreword


    1. Introduction

    What Are Application Programming Interfaces?

    What's Different about API Design?

    Why Should You Use APIs?

    When Should You Avoid APIs?

    API Examples

    File Formats and Network Protocols

    About This Book

    2. Qualities

    Model the Problem Domain

    Hide Implementation Details

    Minimally Complete

    Easy to Use

    Loosely Coupled

    Stable, Documented, and Tested

    3. Patterns

    Pimpl Idiom


    Factory Methods

    API Wrapping Patterns

    Observer Pattern

    4. Design

    A Case for Good Design

    Gathering Functional Requirements

    Creating Use Cases

    Elements of API Design

    Architecture Design

    Class Design

    Function Design

    5. Styles

    Flat C APIs

    Object-Oriented C++ APIs

    Template-Based APIs

    Data-Driven APIs

    6. C++ Usage


    Constructors and Assignment

    Const Correctness


    Operator Overloading

    Function Parameters

    Avoid #define for Constants

    Avoid Using Friends

    Exporting Symbols

    Coding Conventions

    7. Performance

    Pass Input Arguments by Const Reference

    Minimize #include Dependencies

    Declaring Constants

    Initialization Lists

    Memory Optimization

    Don't Inline Until You Need To

    Copy on Write

    Iterating Over Elements

    Performance Analysis

    8. Versioning

    Version Numbers

    Software Branching Strategies

    Life Cycle of an API

    Levels of Compatibility

    How to Maintain Backward Compatibility

    API Reviews

    9. Documentation

    Reasons to Write Documentation

    Types of Documentation

    Documentation Usability

    Using Doxygen

    10. Testing

    Reasons to Write Tests

    Types of API Testing

    Writing Good Tests

    Writing Testable Code

    Automated Testing Tools

    11. Scripting

    Adding Script Bindings

    Script-Binding Technologies

    Adding Python Bindings with Boost Python

    Adding Ruby Bindings with SWIG

    12. Extensibility

    Extending via Plugins

    Extending via Inheritance

    Extending via Templates

    Appendix A: Libraries

    Static versus Dynamic Libraries

    Libraries on Windows

    Libraries on Linux

    Libraries on Mac OS X




advert image