Table of Contents
Preface.
Acknowledgments.
1. About This Book.
What You Should Know Before Reading This Book.Overall Structure of
the Book.How to Read This Book.Some Remarks About Programming
Style.The Standard versus Reality.Example Code and Additional
Information.Feedback.
I. THE BASICS.
2. Function Templates.
A First Look at Function Templates.Defining the Template.Using the
Template.Argument Deduction.Template Parameters.Overloading
Function Templates.Summary.
3. Class Templates.
Implementation of Class Template Stack.Declaration of Class
Templates.Implementation of Member Functions.Use of Class Template
Stack.Specializations of Class Templates.Partial
Specialization.Default Template Arguments.Summary.
4. Nontype
Template Parameters.
Nontype Class Template Parameters.Nontype Function Template
Parameters.Restrictions for Nontype Template
Parameters.Summary.
5. Tricky Basics.
Keyword typename.Using this->.Member Templates.Template Template
Parameters.Zero Initialization.Using String Literals as Arguments
for Function Templates.Summary.
6. Using Templates in
Practice.
The Inclusion Model.Linker Errors.Templates in Header
Files.Explicit Instantiation.Example of Explicit
Instantiation.Combining the Inclusion Model and Explicit
Instantiation.The Separation Model.The Keyword export.Limitations
of the Separation Model.Preparing for the Separation
Model.Templates and inline.Precompiled Headers.Debugging
Templates.Decoding the Error Novel.Shallow Instantiation.Long
Symbols.Tracers.Oracles.Archetypes.Afternotes.Summary.
7. Basic
Template Terminology.
“Class Template” or “Template Class”?Instantiation and
Specialization.Declarations versus Definitions.The One-Definition
Rule.Template Arguments versus Template Parameters.
II. TEMPLATES IN DEPTH.
8. Fundamentals in Depth.
Parameterized Declarations.Virtual Member Functions.Linkage of
Templates.Primary Templates.Template Parameters.Type
Parameters.Nontype Parameters.Template Template Parameters.Default
Template Arguments.Template Arguments.Function Template
Arguments.Type Arguments.Nontype Arguments.Template Template
Arguments.Equivalence.Friends.Friend Functions.Friend
Templates.Afternotes.
9. Names in Templates.
Name Taxonomy.Looking Up Names.Argument-Dependent Lookup.Friend
Name Injection.Injected Class Names.Parsing Templates.Context
Sensitivity in Nontemplates.Dependent Names of Types.Dependent
Names of Templates.Dependent Names in Using-Declarations.ADL and
Explicit Template Arguments.Derivation and Class
Templates.Nondependent Base Classes.Dependent Base
Classes.Afternotes.
10. Instantiation.
On-Demand Instantiation.Lazy Instantiation.The C++ Instantiation
Model.Two-Phase Lookup.Points of Instantiation.The Inclusion and
Separation Models.Looking Across Translation
Units.Examples.Implementation Schemes.Greedy Instantiation.Queried
Instantiation.Iterated Instantiation.Explicit
Instantiation.Afternotes.
11. Template Argument
Deduction.
The Deduction Process.Deduced Contexts.Special Deduction
Situations.Allowable Argument Conversions.Class Template
Parameters.Default Call Arguments.The Barton-Nackman
Trick.Afternotes.
12. Specialization and Overloading.
When “Generic Code” Doesn't Quite Cut It.Transparent
Customization.Semantic Transparency.Overloading Function
Templates.Signatures.Partial Ordering of Overloaded Function
Templates.Formal Ordering Rules.Templates and Nontemplates.Explicit
Specialization.Full Class Template Specialization.Full Function
Template Specialization.Full Member Specialization.Partial Class
Template Specialization.Afternotes.
13. Future
Directions.
The Angle Bracket Hack.Relaxed typename Rules.Default Function
Template Arguments.String Literal and Floating-Point Template
Arguments.Relaxed Matching of Template Template Parameters.Typedef
Templates.Partial Specialization of Function Templates.The typeof
Operator.Named Template Arguments.Static Properties.Custom
Instantiation Diagnostics ..Overloaded Class Templates.List
Parameters.Layout Control.Initializer Deduction.Function
Expressions.Afternotes.
III. TEMPLATES AND DESIGN.
14. The Polymorphic Power of Templates.
Dynamic Polymorphism.Static Polymorphism.Dynamic versus Static
Polymorphism.New Forms of Design Patterns.Generic
Programming.Afternotes.
15. Traits and Policy Classes.
An Example: Accumulating a Sequence.Fixed Traits.Value
Traits.Parameterized Traits.Policies and Policy Classes.Traits and
Policies: What's the Difference?Member Templates versus Template
Template Parameters.Combining Multiple Policies and/or
Traits.Accumulation with General Iterators.Type
Functions.Determining Element Types.Determining Class
Types.References and Qualifiers.Promotion Traits.Policy
Traits.Read-only Parameter Types.Copying, Swapping, and
Moving.Afternotes.
16. Templates and Inheritance.
Named Template Arguments.The Empty Base Class Optimization
(EBCO).Layout Principles.Members as Base Classes.The Curiously
Recurring Template Pattern (CRTP).Parameterized
Virtuality.Afternotes.
17. Metaprograms.
A First Example of a Metaprogram.Enumeration Values versus Static
Constants.A Second Example: Computing the Square Root.Using
Induction Variables.Computational Completeness.Recursive
Instantiation versus Recursive Template Arguments.Using
Metaprograms to Unroll Loops.Afternotes.
18. Expression
Templates.
Temporaries and Split Loops.Encoding Expressions in Template
Arguments.Operands of the Expression Templates.The Array Type.The
Operators.Review.Expression Templates Assignments.Performance and
Limitations of Expression Templates.Afternotes.
IV. ADVANCED APPLICATIONS.
19. Type Classification.
Determining Fundamental Types.Determining Compound
Types.Identifying Function Types.Enumeration Classification with
Overload Resolution.Determining Class Types.Putting It All
Together.Afternotes.
20. Smart Pointers.
Holders and Trules.Protecting Against Exceptions.Holders.Holders as
Members.Resource Acquisition Is Initialization.Holder
Limitations.Copying Holders.Copying Holders Across Function
Calls.Trules.Reference Counting.Where Is the Counter?Concurrent
Counter Access.Destruction and Deallocation.The CountingPtr
Template.A Simple Noninvasive Counter.A Simple Invasive Counter
Template.Constness.Implicit
Conversions.Comparisons.Afternotes.
21. Tuples.
Duos.Recursive Duos.Number of Fields.Type of Fields.Value of
Fields.Tuple Construction.Afternotes.
22. Function Objects and
Callbacks.
Direct, Indirect, and Inline Calls.Pointers and References to
Functions.Pointer-to-Member Functions.Class Type Functors.A First
Example of Class Type Functors.Type of Class Type
Functors.Specifying Functors.Functors as Template Type
Arguments.Functors as Function Call Arguments.Combining Function
Call Parameters and Template Type Parameters.Functors as Nontype
Template Arguments.Function Pointer
Encapsulation.Introspection.Analyzing a Functor Type.Accessing
Parameter Types.Encapsulating Function Pointers.Function Object
Composition.Simple Composition.Mixed Type Composition.Reducing the
Number of Parameters.Value Binders.Selecting the Binding.Bound
Signature.Argument Selection.Convenience Functions.Functor
Operations: A Complete Implementation.Afternotes.
APPENDIXES.
A: The One-Definition Rule.
Translation Units.Declarations and Definitions.The One-Definition
Rule in Detail.One-per-Program Constraints.One-per-Translation Unit
Constraints.Cross-Translation Unit Equivalence Constraints.
B:
Overload Resolution.
When Does Overload Resolution Kick In?Simplified Overload
Resolution.The Implied Argument for Member Functions.Refining the
Perfect Match.Overloading Details.Prefer Nontemplates.Conversion
Sequences.Pointer Conversions.Functors and Surrogate
Functions.Other Overloading Contexts.
Bibliography.
Newsgroups.
Books and Web Sites.
Glossary.
Index. 0201734842T10072002Promotional Information
This book will be the next C++ classic. Although templates have
been part of C++ for well over a decade, they still lead to
misunderstanding, misuse, and controversy. At the same time, they
are increasingly found to be powerful instruments for the
development of cleaner, faster, and smarter software. This has made
templates one of the hottest topics in the C++ community. This book
will be both a complete reference as well as a tutorial. It will
emphasize the practical use of templates, and will include
real-world examples. Every working C++ programmer will need a copy
of this book for his or her library.
About the Author
David Vandevoorde is an engineer at the Edison Design
Group. He is an active member of the ANSI C++ Standards Committee,
and a cofounder of the newsgroup comp.lang.c++.moderated. A
graduate of the Brussels Free University and the Rensselaer
Polytechnic Institute, his interests include algorithm development,
programming languages, and teaching. See www.vandevoorde.com.
Nicolai M. Josuttis is an independent technical
consultant who designs object-oriented software for the
telecommunications, traffic, finance, and manufacturing industries.
He is an active member of the C++ Standards Committee Library
Working Group. Nicolai has written several books on object-oriented
programming and C++. See www.josuttis.com.
0201734842AB09172002