 |
Standard C++ Iostreams and Locales: Advanced Programmer's Guide and Reference Be the First to Write a Review and tell the world about this title!People who purchase this book frequently purchase: - Effective C++: 55 Specific Ways to Improve Your Programs and Designs, 3rd Edition; Scott Meyers, $34.95, 30% Off!
- C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond; David Abrahams, et al, $34.95, 30% Off!
- C++ Network Programming, Volume I: Mastering Complexity with ACE and Patterns; Douglas C. Schmidt, et al, $34.95, 30% Off!
- The C++ Standard Library: A Tutorial and Reference; Nicolai M. Josuttis, $52.25, 30% Off!
Books on similar topics, in best-seller order:Books from the same publisher, in best-seller order:
Standard C++ provides a foundation for creating new, improved, and more powerful C++ components. IOStreams and locales are two such major components for text internationalization. As critical as these two APIs are, however, there are few resources devoted to explaining them.
Standard C++ IOStreams and Locales fills this informational gap. It provides a comprehensive description of, and reference to, the iostreams and locales classes, showing how to put them to use and offering advanced information on customizing and extending their basic operation. Written by two experts involved with the development of the standard, this book reveals the rationale behind the design of the APIs and points out their potential pitfalls.
This book serves as both a guide and a reference to C++ components. Part I explains iostreams, what they are, how they are used, their underlying architectural concepts, and the techniques for extending the iostream framework. Part II introduces internationalization and shows you how to adapt your program to local conventions. Readers seeking an initial overview of the problem domain will find an explanation of what internationalization and localization are, how they are related, and how they differ. With examples, the authors show the differences among cultural conventions, how C++ locales can be used to address such differences, and how locale framework can be extended to handle further, nonstandard cultural conventions.
Standard C++ IOStreams and Locales:
- Explains formatting and error indication features of iostreams in detail
- Describes underlying concepts of the iostreams framework
- Demonstrates implementation of i/o operations for user-defined types
- Shows techniques for implementing extended stream and stream buffer classes
- Introduces internationalization
- Explains how to use standard features for internationalization
- Demonstrates techniques for implementation of user-defined internationalization services
IOStreams and locales serve as a foundation library that provides a number of ready-to-use interfaces, as well as frameworks that can be customized and extended. The class reference to C++ IOStreams and locales completes this comprehensive resource, which belongs in the libraries of all intermediate and advanced C++ programmers.
Contents
Preface xv
Foreword xix
Guide to Readers xxi
PART I: STREAM INPUT AND OUTPUT
1. IOStreams Basics 3
1.1 Input and Output 3
1.2 Formatted Input/Output 12
1.2.1 The Predefined Global Streams 12
1.2.2 The Input and Output Operators 13
1.2.3 The Format Parameters of a Stream 16
1.2.4 Manipulators 22
1.2.5 The Locale of a Stream 27
1.2.6 Comparison Between Formatted Input and Output 28
1.2.7 Peculiarities of Formatted Input 29
1.3 The Stream State 31
1.3.1 The Stream State Flags 31
1.3.2 Checking the Stream State 34
1.3.3 Catching Stream Exceptions 36
1.3.4 Resetting the Stream State 38
1.4 File Input/Output 39
1.4.1 Creating, Opening, Closing and Destroying File Streams 39
1.4.2 The Open Modes 41
1.4.3 Bidirectional File Streams 45
1.5 In-Memory Input/Output 47
1.6 Unformatted Input/Output 48
1.7 Stream Positioning 51
1.8 Synchronization of Streams 54
1.8.1 Means of Synchronization 54
1.8.1.1 Synchronization via flush() and sync() 54
1.8.1.2 Synchronization using the unitbuf Format Flag 55
1.8.1.3 Synchronization by Tying Streams 55
1.8.2 Synchronizing the Predefined Standard Streams 56
1.8.2.1 Synchronization Among the Predefined Standard Streams 57
1.8.2.2 Synchronization with the C Standard I/O 57
1.8.2.3 Synchronization with the External Device 58
1.8.2.4 Synchronization Between Predefined Standard for Narrow and Wide Characters 58
2. The Architecture of IOStreams 61
2.1 The Stream Class 63
2.1.1 Class Heirarchy 63
2.1.1.1 The Stream Base Classes 63
2.1.1.2 The General Stream Classes 66
2.1.1.3 The Concrete Stream Classes 68
2.1.2 How Streams Maintain their Stream Buffer 69
2.1.3 Copying and Assignment of Streams 72
2.1.4 How Streams Maintain Their Locale 76
2.1.5 Collaboration Among Streams, Stream Buffers, and Locales 79
2.2 The Stream Buffer Classes 84
2.2.1 Class Heirarchy 85
2.2.2 The Stream Buffer Abstraction 86
2.2.3 String Stream Buffers 91
2.2.4 File Stream Buffers 97
2.3 Character Types and Character Traits 109
2.3.1 Character Representations 109
2.3.2 Character Traits 114
2.3.2.1 Requirements of a Character Traits Type 114
2.3.2.1.1 The End-of-File Character 114
2.3.2.1.2 Copying, Finding, and Comparing Characters 116
2.3.2.1.3 Conversion State 116
2.3.2.1.4 Stream Positions 116
2.3.2.2 The Predefined Standard Character Traits 118
2.3.3 Character Types 119
2.3.3.1 Requirements for Character Types 120
2.4 Stream Iterators and Stream Buffer Iterators 123
2.4.1 The Concepts of Iterators in the Standard Library 123
2.4.2 Stream Iterators 126
2.4.2.1 Output Stream Iterator 127
2.4.2.2 Input Stream Iterator 129
2.4.2.3 Stream Iterators are One-Pass Iterators 132
2.4.3 Stream Buffer Iterators 134
2.4.3.1 Output Stream Buffer Iterator 134
2.4.3.2 Input Stream Buffer Iterator 136
2.5 Additional Stream Storage and Stream Callbacks 140
2.5.1 Additional Stream Storage 140
2.5.2 Stream Callbacks 142
3. Advanced IOStreams Usage 145
3.1 Input and Output of User-Defined Types 145
3.1.1 The Signature of Inserters and Extractors 146
3.1.2 First Inserters and Extractors 146
3.1.3 Refinements 150
3.1.3.1 Format control 150
3.1.3.2 Prefix and Suffix Operations 151
3.1.3.3 Error Indication 152
3.1.3.4 Internationalization 154
3.1.3.5 I/O Operations 155
3.1.4 Refined Inserters and Extractors 156
3.1.4.1 Internationalization 156
3.1.4.2 Prefix and Suffix Operations 158
3.1.4.3 Format Control 159
3.1.4.4. Error Indication 161
3.1.4.5 Using the Refined Inserter and Extractor 168
3.1.5 Generic Inserters and Extractors 169
3.1.6 Simple Versus Refined Approach 174
3.2 User-Defined Manipulators 176
3.2.1 Manipulators Without Parameters 177
3.2.2 Manipulators with Parameters 179
3.2.1.1 Straightforward Manipulator Implementations 179
3.2.2.2 Generalized Technique: Using a Manipulator Base Template 180
3.2.2.3 Variants of a Manipulator Implementation 184
3.2.2.4 Refinements 186
3.2.2.4.1 Manipulator Base Template with Error Handling 186
3.2.2.4.2 Manipulators with State 189
3.2.2.5 The Standard Manipulator Base Type smanip 191
3.3 Extending Stream Functionality 191
3.3.1 Using Stream Storage for Private Use: iword, pword, and xalloc 192
3.3.1.1 Initializing and Maintaining the iword/pword Index 195
3.3.1.2 Implementing the Date Inserter 195
3.3.1.3 Implementing the Maniuplator 197
3.3.1.4 Using Stream Callbacks for Memory Management 200
3.3.1.5 Error Indication of Stream Callback Functions 204
3.3.1.5.1 Extending the Example 205
3.3.1.6 Using the New Functionality 207
3.3.1.7 Evaluation of the iword/pword Approach 207
3.3.2 Creating New Stream Classes by Derivation 209
3.3.2.1 Deriving the New Stream Classes by Derivation 210
3.3.2.2 Implementing the Date Inserter and the Manipulator 218
3.3.2.2.1 Implementing the Date Inserter 218
3.3.2.2.2 Implementing the Manipulator 221
3.3.2.2.3 Using the New Functionality 221
3.3.2.3 Summary 222
3.3.3 Comparing Both Solutions--iword/pword Versus Derivation 223
3.4 Adding Stream Buffer Functionality 225
3.4.1 Deriving from the Stream Buffer Base Class 225
3.4.1.1 Core Functionality of Stream Buffers Character Transportation 226
3.4.1.1.1 Stream Buffer for Unbuffered Character Transport 229
3.4.1.1.2 Stream Buffer for Buffered Character Transport 235
3.4.1.2 Optional Functionality of Stream Buffers 244
3.4.1.3 Providing New Stream Classes Along with New Stream Buffer Classes 245
3.4.2 Deriving from Concrete Stream Buffer Classes 246
PART I I: INTERNATIONALIZATION
4. Introduction to Internationalization and Localization 251
4.1 Internationalization and Localization 252
4.2 Cultural Conventions 253
4.2.1 Language 253
4.2.2 Numerical Values 253
4.2.3 Monetary Values 254
4.2.4 Time and Date 254
4.2.5 Sorting Words 255
4.2.6 Messages 256
4.2.7 Character Encodings 257
4.2.7.1 Terms and Definitions 257
4.2.7.2 Character Codesets 258
4.2.7.3 Character Encoding Schemes 259
4.2.7.3.1 Japanese Multibyte Encoding Schemes 260
4.2.7.4 Uses of Multibyte Encodings and Wide Characters 262
4.2.7.5 Code Conversions 263
5. Locales 265
5.1 Creating Locale Objects 267
5.1.1 Named Locales 267
5.1.2 Combined Locales 268
5.1.3 The Global Locale 270
Retrieving Facets from a Locale 271
5.2.1 has_facet 272
5.2.2 use_facet 272
6. Standard Facets 275
6.1 Alphabet- and Language-Related Facets 276
6.1.1 Character Classification 276
6.1.1.1 Character Classification 276
6.1.1.2 Character Conversion to Upper- and Lowercase 278
6.1.1.3 Character Conversion Between charT and char 279
6.1.1.4 Special Properties of ctype 279
6.1.2 String Collation 280
6.1.3 Code Conversion 282
6.1.4 Message Catalogs 285
6.2 Formatting and Parsing Facets 286
6.2.1 Numerical and Boolean Values 286
6.2.1.1 The numpunct Facet 287
6.2.1.2 The num_put Facet 287
6.2.1.3 The num_get Facet 289
6.2.2 Monetary Values 290
6.2.2.1 The moneypunct Facet 291
6.2.2.2 The money_put Facet 292
6.2.2.3 The money_get Facet 294
6.2.3 Date and Time Values 295
6.2.3.1 The time_put Facet 295
6.2.3.2 The time_get Facet 297
6.3 Grouping of Standard Facets in a Locale 299
6.3.1 The Standard Facet Families 299
6.3.1.1 The Standard Facet Base Class Templates 299
6.3.1.2 The Derived by name Facets 300
6.3.1.3 Behavior of the Base Class Facets 300
6.3.1.4 Mandatory Facet Types 302
6.3.2 Locale Categories 304
6.3.3 Diagram: Facets and Categories 305
6.4 Advanced Usage of the Standard Facets 306
6.4.1 Indirect Use of a Facet Through a Stream 306
6.4.2 Use of a Facet Through a Locale 307
6.4.3 Direct Use of the Facet Independent of a Locale 309
7. The Archtecture of the Locale Framework 311
7.1 Class Hierarchy 311
7.2 Identification and Lookup of Facets in a Locale 311
7.2.1 Facet Identification 312
7.2.2 Facet Lookup 315
7.2.2.1 Retrieval of Facets from a Locale 315
7.2.2.2 Storing Facets in a Locale 319
7.2.2.3 The Rationale Behind the Use of the Two-Phase Polymorphism 320
7.3 Memory Management of Facets in Locale 320
7.3.1 The Facet Reference Counter 321
7.3.2 Immutability of Facets in a Locale 326
8. User-Defined Facets 327
8.1 Adding a User-Defined Facet to an Existing Facet Family 327
8.2 Defining a New Facet Family 331
Reference Guide 343
Introduction 343
1. Locale 346
- header file 346
- global functions 349
- codecvt 352
- codecvt_base 358
- codecvt_byname 360
- collate 362
- collate_byname 365
- ctype 367
- ctype 373
- cytpe_base 377
- ctype_byname 379
- locale 381
- messages 387
- messages_base 390
- messages_byname 391
- money_base 393
- money_get 395
- moneypunct 398
- moneypunct_byname 403
- money_put 405
- num_get 408
- numpunct 414
- numpunct_byname 417
- num_put 419
- time_base 423
- time_get 425
- time_get_byname 430
- time_put 431
- time_put_byname 434
- time_base 436
- tm 438
-
2. Character Traits 440
- header file 440
- char_traits 442
- char_traits 443
- char_traits 447
3 IOStreams 451
- header file 451
- global type definitions 464
- global objects 465
- basic_filebuf 467
- basic_fstream 471
- basic_ifstream 473
- basic_ios 475
- basic_iostream 480
- basic_istream 481
- basic_istringstream 492
- basic_ofstream 494
- basic_ostream 496
- basic_ostringstream 506
- basic_streambuf 508
- basic_stringbuf 517
- basic_stringstream 521
- fpos 523
- ios_base 524
- manipulators 538
4. Stream Iterators 540
- header file 540
- istreambuf_iterator 542
- istream_iterator 546
- iterator 549
- iterator category tags 550
- ostreambuf_iterator 551
- ostream_iterator 55
5. Other I/O Operations 555
- bitset 555
- complex 557
- basic_string 558
-
Appendix A: Parsing and Extraction of Numerical and bool Values 563
A.1 Parsing Numerical Values 564
A.2 Parsing bool Values 566
A.3 Conversion Specifier and Length Modifier 566
Appendix B: Formatting of Numerical and bool Values 569
B.1 Formatting Numerical Values 570
B.2 Formatting bool Values 572
B.3 Conversion Specifiers, Qualifiers, and Length Modifiers 573
Appendix C: strftime() Conversion Specifiers 575
Appendix D: Correspondences Between C and C++IOStreams 579
D.1 File Open Modes 579
D.2 Stream Positions 580
Appendix E: Differences Between Classic and Standard IOStreams 581
E.1 Templatizing the IOStreams Classes 582
E.2 Splitting Base Class ios 583
E.3 Indicating Errors 584
E.4 Internationalizing IOStreams 585
E.5 Removing_withassign Classes 585
E.6 Removing File Descriptors 586
E.7 String Streams: Replacing strstream by stringstream 587
E.8 Changes to the Stream Buffer Classes 588
E.9 Minor changes 590
Appendix F: Relationship Between C and C++ Locales 591
F.1 Locale Categories in C and C++ 591
F.2 The Global Locale in C and C++ 592
Appendix G: New C++ Features and Idoms 595
G.1 Bitmask Types 595
G.2 POD--Plain Old Data 596
G.3 Explicit Constructors 596
G.4 Template Specialization 599
G.5 Default Template Arguments 604
G.6 Explicit Template Argument Specification 607
G.7 The Typename Keyword 609
G.8 Dynamic Cast 612
G.9 Function try Blocks 616
G.10 Standard Exceptions 619
G.11 Numeric Limits 620
G.12 C++ Strings 620
Bibliography 623
Index 635
|
 |