书籍详情
C++ Templates
作者:(美)David Vandevoorde,(美)Nicolai M.Josuttis著
出版社:中国电力出版社
出版时间:2004-04-01
ISBN:9787508319247
定价:¥49.80
购买这本书可以去
内容简介
《C++Templates中文版》《C++TEMPLATES二合一捆绑销售(中文版&影印版)》关于本书的评论:C++社区确实非常需要这本书。很难想像还有其他人能比这本书的作者做得更好。我强烈推荐这本书。——ThomasBecker,ZephyrAssociates,Inc.C++世界渴望已久的重量级著作。——MarcBriand,C/C++UsersJournal前主编一句话,C++模板圣经已经写就,动手学吧。——MaximKhesin,CVISIONTechnologies,LLC,本书最吸引我的地方就是它对模板的两个方面进行了深刻的阐述:模板的结构和用法。很少有对设计和使用同时进行论述的书籍。书中的示例都是一流的、简明的,并且进行了详细说明。——PatrickMcKillen,VisionlnformationConsuldngLtd.本书介绍了有关模板的所有缺点和陷阱。每一个都是你不想知道,但却是保证模板使用效率所必需的。——DietmarKuhl,PhaidroseaSE本书主要内容:·正确的模板行为·如何避开与模板相关的错误陷阱·从基础的到早前没有文字约定的惯用语法和技巧·如何在不对性能和安全性造成损害的前提下进行源代码重用·如何提高C++程序的效率·如何构建更具灵活性和可维护性的软件模板是C++功能强大的特性之一,然而却常常被人们所忽视、误解与误用。本书将帮助软件设计师、工程师清晰理解为什么、何时及如何使用模板来构建及维护简洁、快速、灵活的高效软件。本书是一本对基本概念和语言特性有着深刻见解的指南性书籍,同时也是一本包含内容广泛的参考性书籍。本书首先讲述了语言细节,然后对编码技巧进行了广泛的讨论,最后还对模板的高级应用进行了阐述、分析。贯串全书的示例阐明了抽象概念并演示了最优实践方法。本书将引导程序员全面完整地开发C++功能强大的特性——模板特性。
作者简介
David Vandevoorde是20多年的C++工作经验,C++标准委员会成员。曾因为审校《The C++ Programming Language》一书的草稿,获得Bjarne Stroustrup的推荐,编写了《C++ Solutions》。
目录
Preface
Acknowledgments
1 About This Book
1.1 What You Should Know Before Reading This Book
1.2 Overall Structure of the Book
1.3 How to Read This Book
1.4 Some Remarks About Programming Style
1.5 The Standard versus Reality
1.6 Example Code and Additional Informations
1.7 Feedback
Part I: The Basics
2 Function Templates
2.1 A First Look at Function Templates
2.1.1 Defining the Template
2.1.2 Using the Template
2.2 Argument Deduction
2.3 Template Parameters
2.4 Overloading Function Templates
2.5 Summary
3 Class Templates
3.1 Implementation of Class Template Stack
3.1.1 Declaration of Class Templates
3.1.2 Implementation of Member Functions
3.2 Use of Class Template Stack
3.3 Specializations of Class Templates
3.4 Partial Specialization
3.5 Default Template Arguments
3.6 Summary
4 Nontype Template Parameters
4.1 Nontype Class Template Parameters
4.2 Nontype Function Template Parameters
4.3 Restrictions for Nontype Template Parameters
4.4 Summary
5 Tricky Basics
5.1 Keyword typename
5.2 Using this->
5.3 Member Templates
5.4 Template Template Parameters
5.5 Zero Initialization
5.6 Using String Literals as Arguments for Function Templates
5.7 Summary
6 Using Templates in Practice
6.1 The Inclusion Model
6.1.1 Linker Errors
6.1.2 Templates in Header Files
6.2 Explicit Instantiation
6.2.1 Example of Explicit Instantiation
6.2.2 Combining the Inclusion Model and Explicit Instantiation
6.3 The Separation Model
6.3.1 The Keyword export
6.3.2 Limitations of the Separation Model
6.3.3 Preparing for the Separation Model
6.4 Templates and inline
6.5 Precompiled Headers
6.6 Debugging Templates
6.6.1 Decoding the Error Novel
6.6.2 Shallow Instantiation
6.6.3 Long Symbols
6.6.4 Tracers
6.6.5 Oracles
6.6.6 Archetypes
6.7 Aftemotes
6.8 Summary
7 Basic Template Terminology
7.1 "Class Template" or "Template Class"?
7.2 Instantiation and Specialization
7.3 Declarations versus Definitions
7.4 The One-Definition Rule
7.5 Template Arguments versus Template Parameters
Part II: Templates in Depth Fundamentals in Depth
8.1 Parameterized Declarations
8.1.1 Virtual Member Functions
8.1.2 Linkage of Templates
8.1.3 Primary Templates
8.2 Template Parameters
8.2.1 Type Parameters
8.2.2 Nontype Parameters
8.2.3 Template Template Parameters
8.2.4 Default Template Arguments
8.3 Template Arguments
8.3.1 Function Template Arguments
8.3.2 Type Arguments
8.3.3 Nontype Arguments
8.3.4 Template Template Arguments
8.3.5 Equivalence
8.4 Friends
8.4.1 Friend Functions
8.4.2 Friend Templates
8.5 Aftemotes
9 Names in Templates
9.1 Name Taxonomy
9.2 Looking Up Names
9.2.1 Argument-Dependent Lookup
9.2.2 Friend Name Injection
9.2.3 Injected Class Names
9.3 Parsing Templates
9.3.1 Context Sensitivity in Nontemplates
9.3.2 Dependent Names of Types
9.3.3 Dependent Names of Templates
9.3.4 Dependent Names in Using-Declarations
9.3.5 ADL and Explicit Template Arguments
9.4 Derivation and Class Templates
9.4.1 Nondependent Base Classes
9.4.2 Dependent Base Classes
9.5 Afternotes
10 Instantiation
10.1 On-Demand Instantiation
10.2 Lazy Instantiation
10.3 The C++ Instantiation Model
10.3.1 Two-Phase Lookup
10.3.2 Points of Instantiation
10.3.3 The Inclusion and Separation Models
10.3.4 Looking Across Translation Units
10.3.5 EXamples
10.4 Implementation Schemes
10.4.1 Greedy Instantiation
10.4.2 Queried Instantiation
10.4.3 Iterated Instantiation
10.5 Explicit Instantiation
10.6 Afternotes
11 Template Argument Deduction
11.1 The Deduction Process
11.2 Deduced Contexts
11.3 Special Deduction Situations
11.4 Allowable Argument Conversions
11.5 Class Template Parameters
11.6 Default Call Arguments
11.7 The Barton-Nackman Trick
11.8 Afternotes
12 Specialization and Overloading
12.1 When "Generic Code" Doesn't Quite Cut It
12.1.1 Transparent Customization
12.1.2 Semantic Transparency
12.2 Overloading Function Templates
12.2.1 Signatures
12.2.2 Partial Ordering of Overloaded Function Templates
12.2.3 Formal Ordering Rules
12.2.4 Templates and Nontemplates
12.3 Explicit Specialization
12.3.1 Full Class Template Specialization
12.3.2 Full Function Template Specialization
12.3.3 Full Member Specialization
12.4 Partial Class Template Specialization
12.5 Aftemotes
13 Future Directions
13.1 The Angle Bracket Hack
13.2 Relaxed typename Rules
13.3 Default Function Template Arguments
13.4 String Literal and Floating-Point Template Arguments
13.5 Relaxed Matching of Template Template Parameters
13.6 Typedef Templates
13.7 Partial Specialization of Function Templates
13.8 The typeof Operator
13.9 Named Template Arguments
13.10 Static Properties
13.11 Custom Instantiation Diagnostics
13.12 Overloaded Class Templates
13.13 List Parameters
13.14 Layout Control
13.15 Initializer Deduction
13.16 Function Expressions
13.17 Afternotes
Part III: Templates and Design
14 The Polymorphic Power of Templates
14.1 Dynamic Polymorphism
14.2 Static Polymorphism
14.3 Dynamic versus Static Polymorphism
14.4 New Forms of Design Patterns
14.5 Generic Programming
14.6 Afternotes
15 Traits and Policy Classes
15.1 An Example: Accumulating a Sequence
15.1.1 Fixed Traits
15.1.2 Value Traits
15.1.3 Parameterized Traits
15.1.4 Policies and Policy Classes
15.1.5 Traits and Policies: What's the Difference?
15.1.6 Member Templates versus Template Template Parameters
15.1.7 Combining Multiple Policies and/or Traits
15.1.8 Accumulation with General Iterators
15.2 Type Functions
15.2.1 Determining Element Types
15.2.2 Determining Class Types
15.2.3 References and Qualifiers
15.2.4 Promotion Traits
15.3 Policy Traits
15.3.1 Read-only Parameter Types
15.3.2 Copying, Swapping, and Moving
15.4 Afternotes
16 Templates and Inheritance
16.1 Named Template Arguments
16.2 The Empty Base Class Optimization (EBCO)
16.2.1 Layout Principles
16.2.2 Members as Base Classes
16.3 The Curiously Recurring Template Pattern (CRTP)
16.4 Parameterized Virtuality
16.5 Afternotes
17 Metaprograms
17.1 A First Example of a Metaprogram
17.2 Enumeration Values versus Static Constants
17.3 A Second Example: Computing the Square Root
17.4 Using Induction Variables
17.5 Computational Completeness
17.6 Recursive Instantiation versus Recursive Template Arguments
17.7 Using Metaprograms to Unroll Loops
17.8 Afternotes
18 Expression Templates
18.1 Temporaries and Split Loops
18.2 Encoding Expressions in Template Arguments
18.2.1 Operands of the Expression Templates
18.2.2 The Array Type
18.2.3 The Operators
18.2.4 Review
18.2.5 Expression Templates Assignments
18.3 Performance and Limitations of Expression Templates
18.4 Afternotes
Part IV: Advanced Applications
19 Type Classification
19.1 Determining Fundamental Types
19.2 Determining Compound Types
19.3 Identifying Function Types
19.4 Enumeration Classification with Overload Resolution
19.5 Determining Class Types
19.6 Putting It All Together
19.7 Afternotes
20 Smart Pointers
20.1 Holders and Trules
20.1.1 Protecting Against Exceptions
20.1.2 Holders
20.1.3 Holders as Members
20.1.4 Resource Acquisition Is Initialization
20.1.5 Holder Limitations
20.1.6 Copying Holders
20.1.7 Copying Holders Across Function Calls
20.1.8 Trules
20.2 Reference Counting
20.2.1 Where Is the Counter?
20.2.2 Concurrent Counter Access
20.2.3 Destruction and Deallocation
20.2.4 The CountingPtr Template
20.2.5 A Simple Noninvasive Counter
20.2.6 A Simple Invasive Counter Template
20.2.7 Constness
20.2.8 Implicit Conversions
20.2.9 Comparisons
20.3 Afternotes
21 Tuples
21.1 Duos
21.2 Recursive Duos
21.2.1 Number of Fields
21.2.2 Type of Fields
21.2.3 Value of Fields
21.3 Tuple Construction
21.4 Afternotes
22 Function Objects and Callbacks
22.1 Direct, Indirect, and Inline Calls
22.2 Pointers and References to Functions
22.3 Pointer-to-Member Functions
22.4 Class Type Functors
22.4.1 A First Example of Class Type Functors
22.4.2 Type of Class Type Functors
22.5 Specifying Functors
22.5.1 Functors as Template Type Arguments
22.5.2 Functors as Function Call Arguments
22.5.3 Combining Function Call Parameters and Template Type Parameters
22.5.4 Functors as Nontype Template Arguments
22.5.5 Function Pointer Encapsulation
22.6 Introspection
22.6.1 Analyzing a Functor Type
22.6.2 Accessing Parameter Types
22.6.3 Encapsulating Function Pointers
22.7 Function Object Composition
22.7.1 Simple Composition
22.7.2 Mixed Type Composition
22.7.3 Reducing the Number of Parameters
22.8 Value Binders
22.8.1 Selecting the Binding
22.8.2 Bound Signature
22.8.3 Argument Selection
22.8.4 Convenience Functions
22.9 Functor Operations: A Complete Implementation
22.10 Afternotes
Appendixes
A The One-Definition Rule
A.1 Translation Units
A.2 Declarations and Definitions
A.3 The One-Definition Rule in Detail
A.3.1 One-per-Program Constraints
A.3.2 One-per-Translation Unit Constraints
A.3.3 Cross-Translation Unit Equivalence Constraints
B Overload Resolution
B.1 When Does Overload Resolution Kick In?
B.2 Simplified Overload Resolution
B.2.1 The Implied Argument for Member Functions
B.2.2 Refining the Perfect Match
B.3 Overloading Details
B.3.1 Prefer Nontemplates
B.3.2 Conversion Sequences
B.3.3 Pointer Conversions
B.3.4 Functors and Surrogate Functions
B.3.5 Other Overloading Contexts
Bibliography
Newsgroups
Books and Web Sites
Glossary
Index
Acknowledgments
1 About This Book
1.1 What You Should Know Before Reading This Book
1.2 Overall Structure of the Book
1.3 How to Read This Book
1.4 Some Remarks About Programming Style
1.5 The Standard versus Reality
1.6 Example Code and Additional Informations
1.7 Feedback
Part I: The Basics
2 Function Templates
2.1 A First Look at Function Templates
2.1.1 Defining the Template
2.1.2 Using the Template
2.2 Argument Deduction
2.3 Template Parameters
2.4 Overloading Function Templates
2.5 Summary
3 Class Templates
3.1 Implementation of Class Template Stack
3.1.1 Declaration of Class Templates
3.1.2 Implementation of Member Functions
3.2 Use of Class Template Stack
3.3 Specializations of Class Templates
3.4 Partial Specialization
3.5 Default Template Arguments
3.6 Summary
4 Nontype Template Parameters
4.1 Nontype Class Template Parameters
4.2 Nontype Function Template Parameters
4.3 Restrictions for Nontype Template Parameters
4.4 Summary
5 Tricky Basics
5.1 Keyword typename
5.2 Using this->
5.3 Member Templates
5.4 Template Template Parameters
5.5 Zero Initialization
5.6 Using String Literals as Arguments for Function Templates
5.7 Summary
6 Using Templates in Practice
6.1 The Inclusion Model
6.1.1 Linker Errors
6.1.2 Templates in Header Files
6.2 Explicit Instantiation
6.2.1 Example of Explicit Instantiation
6.2.2 Combining the Inclusion Model and Explicit Instantiation
6.3 The Separation Model
6.3.1 The Keyword export
6.3.2 Limitations of the Separation Model
6.3.3 Preparing for the Separation Model
6.4 Templates and inline
6.5 Precompiled Headers
6.6 Debugging Templates
6.6.1 Decoding the Error Novel
6.6.2 Shallow Instantiation
6.6.3 Long Symbols
6.6.4 Tracers
6.6.5 Oracles
6.6.6 Archetypes
6.7 Aftemotes
6.8 Summary
7 Basic Template Terminology
7.1 "Class Template" or "Template Class"?
7.2 Instantiation and Specialization
7.3 Declarations versus Definitions
7.4 The One-Definition Rule
7.5 Template Arguments versus Template Parameters
Part II: Templates in Depth Fundamentals in Depth
8.1 Parameterized Declarations
8.1.1 Virtual Member Functions
8.1.2 Linkage of Templates
8.1.3 Primary Templates
8.2 Template Parameters
8.2.1 Type Parameters
8.2.2 Nontype Parameters
8.2.3 Template Template Parameters
8.2.4 Default Template Arguments
8.3 Template Arguments
8.3.1 Function Template Arguments
8.3.2 Type Arguments
8.3.3 Nontype Arguments
8.3.4 Template Template Arguments
8.3.5 Equivalence
8.4 Friends
8.4.1 Friend Functions
8.4.2 Friend Templates
8.5 Aftemotes
9 Names in Templates
9.1 Name Taxonomy
9.2 Looking Up Names
9.2.1 Argument-Dependent Lookup
9.2.2 Friend Name Injection
9.2.3 Injected Class Names
9.3 Parsing Templates
9.3.1 Context Sensitivity in Nontemplates
9.3.2 Dependent Names of Types
9.3.3 Dependent Names of Templates
9.3.4 Dependent Names in Using-Declarations
9.3.5 ADL and Explicit Template Arguments
9.4 Derivation and Class Templates
9.4.1 Nondependent Base Classes
9.4.2 Dependent Base Classes
9.5 Afternotes
10 Instantiation
10.1 On-Demand Instantiation
10.2 Lazy Instantiation
10.3 The C++ Instantiation Model
10.3.1 Two-Phase Lookup
10.3.2 Points of Instantiation
10.3.3 The Inclusion and Separation Models
10.3.4 Looking Across Translation Units
10.3.5 EXamples
10.4 Implementation Schemes
10.4.1 Greedy Instantiation
10.4.2 Queried Instantiation
10.4.3 Iterated Instantiation
10.5 Explicit Instantiation
10.6 Afternotes
11 Template Argument Deduction
11.1 The Deduction Process
11.2 Deduced Contexts
11.3 Special Deduction Situations
11.4 Allowable Argument Conversions
11.5 Class Template Parameters
11.6 Default Call Arguments
11.7 The Barton-Nackman Trick
11.8 Afternotes
12 Specialization and Overloading
12.1 When "Generic Code" Doesn't Quite Cut It
12.1.1 Transparent Customization
12.1.2 Semantic Transparency
12.2 Overloading Function Templates
12.2.1 Signatures
12.2.2 Partial Ordering of Overloaded Function Templates
12.2.3 Formal Ordering Rules
12.2.4 Templates and Nontemplates
12.3 Explicit Specialization
12.3.1 Full Class Template Specialization
12.3.2 Full Function Template Specialization
12.3.3 Full Member Specialization
12.4 Partial Class Template Specialization
12.5 Aftemotes
13 Future Directions
13.1 The Angle Bracket Hack
13.2 Relaxed typename Rules
13.3 Default Function Template Arguments
13.4 String Literal and Floating-Point Template Arguments
13.5 Relaxed Matching of Template Template Parameters
13.6 Typedef Templates
13.7 Partial Specialization of Function Templates
13.8 The typeof Operator
13.9 Named Template Arguments
13.10 Static Properties
13.11 Custom Instantiation Diagnostics
13.12 Overloaded Class Templates
13.13 List Parameters
13.14 Layout Control
13.15 Initializer Deduction
13.16 Function Expressions
13.17 Afternotes
Part III: Templates and Design
14 The Polymorphic Power of Templates
14.1 Dynamic Polymorphism
14.2 Static Polymorphism
14.3 Dynamic versus Static Polymorphism
14.4 New Forms of Design Patterns
14.5 Generic Programming
14.6 Afternotes
15 Traits and Policy Classes
15.1 An Example: Accumulating a Sequence
15.1.1 Fixed Traits
15.1.2 Value Traits
15.1.3 Parameterized Traits
15.1.4 Policies and Policy Classes
15.1.5 Traits and Policies: What's the Difference?
15.1.6 Member Templates versus Template Template Parameters
15.1.7 Combining Multiple Policies and/or Traits
15.1.8 Accumulation with General Iterators
15.2 Type Functions
15.2.1 Determining Element Types
15.2.2 Determining Class Types
15.2.3 References and Qualifiers
15.2.4 Promotion Traits
15.3 Policy Traits
15.3.1 Read-only Parameter Types
15.3.2 Copying, Swapping, and Moving
15.4 Afternotes
16 Templates and Inheritance
16.1 Named Template Arguments
16.2 The Empty Base Class Optimization (EBCO)
16.2.1 Layout Principles
16.2.2 Members as Base Classes
16.3 The Curiously Recurring Template Pattern (CRTP)
16.4 Parameterized Virtuality
16.5 Afternotes
17 Metaprograms
17.1 A First Example of a Metaprogram
17.2 Enumeration Values versus Static Constants
17.3 A Second Example: Computing the Square Root
17.4 Using Induction Variables
17.5 Computational Completeness
17.6 Recursive Instantiation versus Recursive Template Arguments
17.7 Using Metaprograms to Unroll Loops
17.8 Afternotes
18 Expression Templates
18.1 Temporaries and Split Loops
18.2 Encoding Expressions in Template Arguments
18.2.1 Operands of the Expression Templates
18.2.2 The Array Type
18.2.3 The Operators
18.2.4 Review
18.2.5 Expression Templates Assignments
18.3 Performance and Limitations of Expression Templates
18.4 Afternotes
Part IV: Advanced Applications
19 Type Classification
19.1 Determining Fundamental Types
19.2 Determining Compound Types
19.3 Identifying Function Types
19.4 Enumeration Classification with Overload Resolution
19.5 Determining Class Types
19.6 Putting It All Together
19.7 Afternotes
20 Smart Pointers
20.1 Holders and Trules
20.1.1 Protecting Against Exceptions
20.1.2 Holders
20.1.3 Holders as Members
20.1.4 Resource Acquisition Is Initialization
20.1.5 Holder Limitations
20.1.6 Copying Holders
20.1.7 Copying Holders Across Function Calls
20.1.8 Trules
20.2 Reference Counting
20.2.1 Where Is the Counter?
20.2.2 Concurrent Counter Access
20.2.3 Destruction and Deallocation
20.2.4 The CountingPtr Template
20.2.5 A Simple Noninvasive Counter
20.2.6 A Simple Invasive Counter Template
20.2.7 Constness
20.2.8 Implicit Conversions
20.2.9 Comparisons
20.3 Afternotes
21 Tuples
21.1 Duos
21.2 Recursive Duos
21.2.1 Number of Fields
21.2.2 Type of Fields
21.2.3 Value of Fields
21.3 Tuple Construction
21.4 Afternotes
22 Function Objects and Callbacks
22.1 Direct, Indirect, and Inline Calls
22.2 Pointers and References to Functions
22.3 Pointer-to-Member Functions
22.4 Class Type Functors
22.4.1 A First Example of Class Type Functors
22.4.2 Type of Class Type Functors
22.5 Specifying Functors
22.5.1 Functors as Template Type Arguments
22.5.2 Functors as Function Call Arguments
22.5.3 Combining Function Call Parameters and Template Type Parameters
22.5.4 Functors as Nontype Template Arguments
22.5.5 Function Pointer Encapsulation
22.6 Introspection
22.6.1 Analyzing a Functor Type
22.6.2 Accessing Parameter Types
22.6.3 Encapsulating Function Pointers
22.7 Function Object Composition
22.7.1 Simple Composition
22.7.2 Mixed Type Composition
22.7.3 Reducing the Number of Parameters
22.8 Value Binders
22.8.1 Selecting the Binding
22.8.2 Bound Signature
22.8.3 Argument Selection
22.8.4 Convenience Functions
22.9 Functor Operations: A Complete Implementation
22.10 Afternotes
Appendixes
A The One-Definition Rule
A.1 Translation Units
A.2 Declarations and Definitions
A.3 The One-Definition Rule in Detail
A.3.1 One-per-Program Constraints
A.3.2 One-per-Translation Unit Constraints
A.3.3 Cross-Translation Unit Equivalence Constraints
B Overload Resolution
B.1 When Does Overload Resolution Kick In?
B.2 Simplified Overload Resolution
B.2.1 The Implied Argument for Member Functions
B.2.2 Refining the Perfect Match
B.3 Overloading Details
B.3.1 Prefer Nontemplates
B.3.2 Conversion Sequences
B.3.3 Pointer Conversions
B.3.4 Functors and Surrogate Functions
B.3.5 Other Overloading Contexts
Bibliography
Newsgroups
Books and Web Sites
Glossary
Index
猜您喜欢