What’s different about API design?
4
Why should you use APIs?
7
When should you avoid APIs?
11
Libraries, frameworks, and software development kits
17
File formats and network protocols
19
Model the problem domain
25
Hide implementation details
31
Stable, documented, and tested
80
A case for good design
123
Gathering functional requirements
129
Elements of API design
139
Object-oriented C++ APIs
186
Constructors and assignment
211
Avoid #define for constants
239
Which C++ revision to use
251
Pass input arguments by const reference
331
Minimize #include dependencies
333
Don’t inline functions until you need to
348
Iterating over elements
356
Multithreading with C++
367
Software branching strategies
388
Levels of compatibility
393
How to maintain backward compatibility
401
Reasons to write documentation
415
Types of documentation
423
Documentation usability
430
Reasons to write tests
443
Automated testing tools
476
13. Objective-C and Swift
487
Interface design in C++ and Objective-C
487
Data hiding in Objective-C
489
Objective-C behind a C++ API
491
C++ behind an Objective-C API
494
C++ behind a Swift API
497
Adding script bindings
501
Script binding technologies
506
Adding Python bindings with Boost Python
510
Adding Ruby bindings with SWIG
521
Extending via inheritance
549
Extending via templates
560