C++. Biblioteka IOStreams i lokalizacja programów - Helion
Tytuł oryginału: Standard C++ IOStremas and Locales
Tłumaczenie: Przemysław Szeremiota
ISBN: 83-7361-739-6
stron: 608, Format: B5, okładka: twarda
Data wydania: 2005-01-27
Księgarnia: Helion
Cena książki: 79,00 zł
Opanuj biblioteki strumieni i lokalizacji
- Poznaj budowÄ™ i architekturÄ™ biblioteki strumieni
- Zastosuj standardowe mechanizmy lokalizacji
- Stwórz własne usługi internacjonalizacji programów
Biblioteka strumieni (IOStreams) oraz biblioteka lokalizacji to jedne z najważniejszych komponentów języka C++, wykorzystywane przy dostowywaniu aplikacji do wymogów językowych krajów, w których są wydawane i wykorzystywane. Biblioteki te stosuje się do sterowania formatowaniem tekstów, definiowania własnych mechanizmów formatujących oraz tworzenia wersji językowych oprogramowania. Jednakże pomimo wielkiej wagi tych bibliotek, poświęcona im dokumentacja jest wyjątkowo skąpa -- trudno znaleźć kompletne omówienie znajdujących się w nich klas oraz sposobów ich wykorzystania we własnych aplikacjach.
Książka "C++. Biblioteka IOStreams i lokalizacja programów" wypełnia tę lukę. Zawiera ona opis oraz dokumentację programistyczną klas biblioteki IOStreams i lokalizacji, a także prezentuje sposoby ich wykorzystywania i zaawansowane metody rozszerzania i dostosowywania do własnych potrzeb. Przedstawia zagadnienia związane z tworzeniem wersji językowych aplikacji i dostosowywania ich do lokalnych konwencji językowo-kulturowych.
- Formatowanie wejścia i wyjścia
- Operacje na strumieniach plikowych
- Synchronizowanie strumieni
- Architektura biblioteki IOStreams
- Internacjonalizacja i lokalizacja programów
- Szkielet lokalizacji
- Definiowanie własnych aspektów lokalizacji
Jeśli planujesz implementację własnych mechanizmów lokalizacji programów, ta książka będzie dla Ciebie doskonałym źródłem informacji.
O autorach:
Angelika Langer pracowała jako programista i szkoleniowiec w Rogue Wave Software, występuje na międzynarodowych konferencjach poświęconych zagadnieniom projektowania i programowania obiektowego. [więcej...]
Klaus Kreft jest głównym konsultantem w Siemens Business Service, pracował jako starszy konsultant w Rogue Wave Software oraz jako projektant systemów w Siemensie. [więcej...]
Spis treści
C++. Biblioteka IOStreams i lokalizacja programów -- spis treści
Słowo wstępne (11)
Wstęp (13)
Wskazówki dla Czytelników (17)
Część I Strumieniowe wejście-wyjście (23)
Rozdział 1. Podstawy biblioteki IOStreams (25)
- 1.1. Wejście i wyjście (25)
- 1.2. Formatowanie wejścia i wyjścia (33)
- 1.2.1. Strumienie globalne biblioteki IOStreams (33)
- 1.2.2. Operatory wejścia i wyjścia (34)
- 1.2.3. Parametry formatowania strumienia (37)
- 1.2.4. Manipulatory (43)
- 1.2.5. Lokalizacja strumienia (47)
- 1.2.6. Formatowanie wejścia i wyjścia - porównanie (48)
- 1.2.7. Jeszcze o formatowaniu wejścia (49)
- 1.3. Stan strumienia (51)
- 1.3.1. Znaczniki stanu strumienia (52)
- 1.3.2. Kontrola stanu strumienia (54)
- 1.3.3. Przechwytywanie wyjątków strumieni (56)
- 1.3.4. Zerowanie stanu strumienia (58)
- 1.4. Operacje wejścia-wyjścia na strumieniach plikowych (59)
- 1.4.1. Tworzenie, otwieranie, zamykanie i usuwanie strumieni plikowych (60)
- 1.4.2. Tryby otwierania strumieni plikowych (61)
- 1.4.3. Dwukierunkowe strumienie plikowe (65)
- 1.5. Operacje wejścia-wyjścia na strumieniach w pamięci (67)
- 1.6. Wejście i wyjście bez formatowania (69)
- 1.7. Pozycjonowanie w strumieniu (71)
- 1.8. Synchronizacja strumieni (73)
- 1.8.1. Åšrodki synchronizacji (74)
- 1.8.1.1. Synchronizacja wywołaniami flush() i sync() (74)
- 1.8.1.2. Synchronizacja za pośrednictwem znacznika formatu unitbuf (75)
- 1.8.1.3. Synchronizacja przez wiÄ…zanie strumieni (75)
- 1.8.2. Synchronizacja predefiniowanych strumieni standardowych (76)
- 1.8.2.1. Synchronizacja pomiędzy predefiniowanymi strumieniami standardowymi (77)
- 1.8.2.2. Synchronizacja predefiniowanego strumienia z jego analogiem w postaci standardowego pliku wejścia-wyjścia języka C (77)
- 1.8.2.3. Synchronizacja predefiniowanego strumienia standardowego ze skojarzonym z nim urządzeniem zewnętrznym (78)
- 1.8.2.4. Synchronizacja pomiędzy strumieniami znaków zwykłych i poszerzonych (78)
- 1.8.1. Åšrodki synchronizacji (74)
Rozdział 2. Architektura biblioteki IOStreams (79)
- 2.1. Klasy strumieni (80)
- 2.1.1. Hierarchia klas (81)
- 2.1.1.1. Bazowe klasy strumieni (81)
- 2.1.1.2. Ogólne klasy strumieni (84)
- 2.1.1.3. Konkretne klasy strumieni (85)
- 2.1.2. ZarzÄ…dzanie buforem strumienia (86)
- 2.1.3. Kopiowanie i przypisania obiektów strumieni (89)
- 2.1.4. ZarzÄ…dzanie lokalizacjami strumieni (92)
- 2.1.5. Współpraca obiektów strumieni, buforów strumieni i lokalizacji (96)
- 2.1.1. Hierarchia klas (81)
- 2.2. Klasy buforów strumieni (100)
- 2.2.1. Hierarchia klas (101)
- 2.2.2. Abstrakcja bufora strumienia (102)
- 2.2.3. Bufory strumieni ciągów znaków (107)
- 2.2.4. Bufory strumieni plikowych (113)
- 2.3. Typy i cechy znakowe (122)
- 2.3.1. Reprezentacje znaków (122)
- 2.3.2. Cechy znakowe (127)
- 2.3.2.1. Wymagania odnośnie typu cechy znakowej (127)
- 2.3.2.2 Predefiniowane standardowe typy cech znakowych (131)
- 2.3.3. Typy znakowe (132)
- 2.3.3.1. Wymagania dla typów znakowych (132)
- 2.4. Iteratory strumieni i buforów strumieni (135)
- 2.4.1. Koncepcja iteratorów w bibliotece standardowej (136)
- 2.4.2. Iteratory strumieni (138)
- 2.4.2.1. Iterator strumienia wyjściowego (139)
- 2.4.2.2. Iterator strumienia wejściowego (140)
- 2.4.2.3. Iteratory strumieni a jednoprzebiegowość (144)
- 2.4.3. Iteratory buforów strumieni (146)
- 2.4.3.1. Iterator bufora strumienia wyjściowego (146)
- 2.4.3.2. Iterator bufora strumienia wejściowego (147)
- 2.5. Dodatkowa pamięć obiektu strumienia i wywołania zwrotne (150)
- 2.5.1. Dodatkowa pamięć obiektu strumienia (151)
- 2.5.2. Wywołania zwrotne strumieni (153)
Rozdział 3. Zaawansowane zastosowania biblioteki IOStreams (155)
- 3.1. Wejście i wyjście dla typów definiowanych przez użytkownika (155)
- 3.1.1. Sygnatury inserterów i ekstraktorów (156)
- 3.1.2. Pierwsze własne insertery i ekstraktory (156)
- 3.1.3. Udoskonalenia (159)
- 3.1.3.1. Sterowanie formatowaniem (160)
- 3.1.3.2. Operacje wstępne i likwidacyjne (161)
- 3.1.3.3. Sygnalizowanie błędów (162)
- 3.1.3.4. Umiędzynarodowienie (163)
- 3.1.3.5. Operacje wejścia-wyjścia (165)
- 3.1.4. Udoskonalone wersje insertera i ekstraktora daty (165)
- 3.1.4.1. Umiędzynarodawianie daty (165)
- 3.1.4.2. Czynności wstępne i likwidacyjne (167)
- 3.1.4.3. Sterowanie formatowaniem (168)
- 3.1.4.4. Sygnalizacja błędów (169)
- 3.1.4.5. Zastosowanie udoskonalonego insertera i ekstraktora (176)
- 3.1.5. Ogólne wersje insertera i ekstraktora (177)
- 3.1.6. Wersja prosta a udoskonalona (182)
- 3.2. Manipulatory definiowane przez użytkownika (184)
- 3.2.1. Manipulatory bezparametrowe (185)
- 3.2.2. Manipulatory sparametryzowane (187)
- 3.2.2.1. Proste implementacje manipulatorów z parametrami (187)
- 3.2.2.2. Wersja uogólniona - szablon klasy bazowej manipulatora (188)
- 3.2.2.3. Warianty implementacji manipulatora (192)
- 3.2.2.4. Udoskonalenia (194)
- 3.2.2.5. Typ bazowy manipulatorów standardowych - smanip (198)
- 3.3. Rozszerzanie funkcji strumienia (199)
- 3.3.1. Własne zastosowania dodatkowej pamięci strumienia - iword, pword i xalloc (199)
- 3.3.1.1. Inicjalizacja i utrzymywanie indeksu pary iword-pword (202)
- 3.3.1.2. Implementacja insertera dat (202)
- 3.3.1.3. Implementacja manipulatora (204)
- 3.3.1.4. Zarządzanie pamięcią za pośrednictwem wywołań zwrotnych strumieni (206)
- 3.3.1.5. Sygnalizowanie błędów funkcji wywołań zwrotnych (211)
- 3.3.1.6. Stosowanie nowych funkcji (213)
- 3.3.1.7. Ocena metody wykorzystujÄ…cej pola iword-pword (213)
- 3.3.2. Wyprowadzanie nowych klas strumieni (215)
- 3.3.2.1. Wyprowadzanie nowej klasy strumienia (216)
- 3.3.2.2. Implementacja insertera i manipulatora (223)
- 3.3.2.3. Podsumowanie (226)
- 3.3.3. Porównanie techniki iword-pword i rozbudowy hierarchii klas (227)
- 3.3.1. Własne zastosowania dodatkowej pamięci strumienia - iword, pword i xalloc (199)
- 3.4. Rozszerzanie funkcji bufora strumienia (229)
- 3.4.1. Wyprowadzanie z klasy bazowej bufora strumienia (230)
- 3.4.1.1. Rdzenne funkcje buforów strumieni - transport znaków (230)
- 3.4.1.2. Opcjonalne funkcje buforów strumieni (246)
- 3.4.1.3. Udostępnianie nowych klas strumieni z nowymi klasami buforów strumieni (248)
- 3.4.2. Wyprowadzanie pochodnych konkretnych klas buforów strumieni (248)
- 3.4.1. Wyprowadzanie z klasy bazowej bufora strumienia (230)
Część II Internacjonalizacja (251)
Rozdział 4. Wprowadzenie do internacjonalizacji i lokalizacji (253)
- 4.1. Internacjonalizacja a lokalizacja (253)
- 4.2. Konwencje kulturowe (254)
- 4.2.1. Język (255)
- 4.2.2. Wartości liczbowe (255)
- 4.2.3. Wartości pieniężne (255)
- 4.2.4. Godziny i daty (256)
- 4.2.5. PorzÄ…dek alfabetyczny (257)
- 4.2.6. Komunikaty (258)
- 4.2.7. Kodowanie znaków (258)
- 4.2.7.1. Pojęcia i definicje (258)
- 4.2.7.2. Zestawy znaków (259)
- 4.2.7.3. Metody kodowania znaków (260)
- 4.2.7.4. Zastosowania metod kodowania wielobajtowego i znaków poszerzonych (263)
- 4.2.7.5. Konwersje kodowania (264)
Rozdział 5. Lokalizacja (267)
- 5.1. Tworzenie obiektów lokalizacji (269)
- 5.1.1. Nazwane obiekty lokalizacji (269)
- 5.1.2. Lokalizacje kombinowane (270)
- 5.1.3. Lokalizacja globalna (272)
- 5.2. Pobieranie aspektów z lokalizacji (273)
- 5.2.1. Funkcja has_facet (273)
- 5.2.2. Funkcja use_facet (274)
Rozdział 6. Aspekty standardowe (277)
- 6.1. Aspekty językowe i alfabetyczne (278)
- 6.1.1. Klasyfikacja znaków (278)
- 6.1.1.1. Klasyfikacja znaków (278)
- 6.1.1.2. Konwersja znaków liter małych i wielkich (279)
- 6.1.1.3. Konwersja znaków pomiędzy typami charT i char (280)
- 6.1.1.4. Właściwości specjalne aspektu ctype<char> (281)
- 6.1.2. Porządkowanie ciągów (281)
- 6.1.3. Konwersja kodowania (283)
- 6.1.4. Katalogi komunikatów (287)
- 6.1.1. Klasyfikacja znaków (278)
- 6.2. Aspekty formatowania i analizy leksykalnej (287)
- 6.2.1. Wartości liczbowe i logiczne (288)
- 6.2.1.1. Aspekt numpunct (288)
- 6.2.1.2. Aspekt num_put (289)
- 6.2.1.3. Aspekt num_get (290)
- 6.2.2. Wartości pieniężne (291)
- 6.2.2.1. Aspekt moneypunct (292)
- 6.2.2.2. Aspekt money_put (293)
- 6.2.2.3. Aspekt money_get (294)
- 6.2.3. Wartości daty i czasu (296)
- 6.2.3.1. Aspekt time_put (297)
- 6.2.3.2. Aspekt time_get (298)
- 6.2.1. Wartości liczbowe i logiczne (288)
- 6.3. Grupowanie aspektów standardowych w obiektach lokalizacji (300)
- 6.3.1. Rodziny aspektów standardowych (300)
- 6.3.1.1. Szablony klas bazowych aspektów standardowych (300)
- 6.3.1.2. Aspekty byname (301)
- 6.3.1.3. Zachowanie klasy bazowej aspektów (302)
- 6.3.1.4. Obowiązkowe typy aspektów (303)
- 6.3.2. Kategorie lokalizacji (305)
- 6.3.3. Diagram kategorii aspektów (305)
- 6.3.1. Rodziny aspektów standardowych (300)
- 6.4. Zaawansowane zastosowania aspektów standardowych (307)
- 6.4.1. Użycie aspektu za pośrednictwem obiektu strumienia (307)
- 6.4.2. Użycie aspektu za pośrednictwem obiektu lokalizacji (308)
- 6.4.3. Użycie aspektu wprost, niezależnie od obiektu lokalizacji (310)
Rozdział 7. Architektura szkieletu lokalizacji (313)
- 7.1. Hierarchia klas (313)
- 7.2. Identyfikacja i wyszukiwanie aspektów w lokalizacjach (313)
- 7.2.1. Identyfikacja aspektów (314)
- 7.2.2. Wyszukiwanie aspektów (317)
- 7.2.2.1. Pobieranie aspektu z obiektu lokalizacji (317)
- 7.2.2.2. Umieszczanie aspektów w obiekcie lokalizacji (321)
- 7.2.2.3. Uzasadnienie dla zastosowania polimorfizmu dwufazowego (321)
- 7.3. Zarządzanie pamięcią aspektów w obiektach lokalizacji (322)
- 7.3.1. Licznik odwołań aspektu (322)
- 7.3.2. Niezmienność aspektów w obiekcie lokalizacji (327)
Rozdział 8. Aspekty definiowane przez użytkownika (329)
- 8.1. Dodawanie własnego aspektu do istniejącej rodziny aspektów (329)
- 8.2. Definiowanie nowej rodziny aspektów (333)
Dodatki (345)
Dodatek A Podręcznik programisty (347)
- Lokalizacja (350)
- Plik nagłówkowy <locale> (350)
- Funkcje globalne (352)
- codecvt<internT, externT, stateT> (354)
- codecvt_base (359)
- codecvt_byname<internT, externT, stateT> (360)
- collate<charT> (362)
- collate_byname<charT> (364)
- ctype<charT> (366)
- ctype<char> (370)
- ctype_base (373)
- ctype_byname<charT> (374)
- locale (376)
- messages<charT> (381)
- messages_base (383)
- messages_byname<charT> (384)
- money_base (386)
- money_get<charT, InputIterator> (387)
- moneypunct<charT, Inter> (390)
- moneypunct_byname<charT, Inter> (394)
- money_put<charT, OutputIterator> (396)
- num_get<charT, InputIterator> (398)
- numpunct<charT> (403)
- numpunct_byname<charT> (406)
- num_put<charT, OutputIterator> (408)
- time_base (412)
- time_get<charT, InputIterator> (413)
- time_get_byname<charT, InputIterator> (417)
- time_put<charT, OutputIterator> (418)
- time_put_byname<charT, OutputIterator> (421)
- tm (423)
- Cechy znakowe (425)
- Plik nagłówkowy <string> (425)
- char_traits<charT> (427)
- char_traits<char> (428)
- char_traits<wchar_t> (431)
- IOStreams (434)
- Plik nagłówkowy <iosfwd> (434)
- Plik nagłówkowy <iostream> (437)
- Plik nagłówkowy <ios> (438)
- Plik nagłówkowy <streambuf> (440)
- Plik nagłówkowy <istream> (441)
- Plik nagłówkowy <ostream> (442)
- Plik nagłówkowy <iomanip> (443)
- Plik nagłówkowy <sstream> (444)
- Plik nagłówkowy <fstream> (445)
- Globalne definicje typów (446)
- Obiekty globalne (447)
- basic_filebuf<charT, traits> (449)
- basic_fstream<charT, traits> (453)
- basic_ifstream<charT, traits> (455)
- basic_ios<charT, traits> (457)
- basic_iostream<charT, traits> (461)
- basic_istream<charT, traits> (462)
- basic_istringstream<charT, traits, Allocator> (471)
- basic_ostream<charT, traits> (473)
- basic_ostream<charT, traits> (475)
- basic_ostringstream<charT, traits, Allocator> (483)
- basic_streamgbuf<charT, traits> (485)
- basic_stringbuf<charT, traits, Allocator> (492)
- basic_stringstream<charT, traits, Allocator> (495)
- fpos<stateT> (497)
- ios_base (498)
- Manipulatory (508)
- Iteratory strumieni (509)
- Plik nagłówkowy <iterator> (509)
- istreambuf_iterator<charT, traits> (511)
- istream_iterator<T, charT, traits, Distance> (515)
- iterator<Category, T, Distance, Pointer, Reference> (518)
- Znaczniki kategorii iteratorów (519)
- ostreambuf_iterator<charT, traits> (520)
- ostream_iterator<T, charT, traits, Distance> (522)
- Inne operacje wejścia-wyjścia (524)
- bitset<N> (524)
- complex<T> (525)
- basic_string<charT, traits, Allocator> (526)
Dodatek B Analiza leksykalna i wyodrębnianie wartości liczbowych i logicznych (529)
- B.1. Analiza leksykalna wartości liczbowych (530)
- B.2. Analiza leksykalna wartości logicznych (531)
- B.3. Specyfikatory konwersji i modyfikatory długości (532)
Dodatek C Formatowanie wartości liczbowych i logicznych (535)
- C.1. Formatowanie wartości liczbowych (535)
- C.2. Formatowanie wartości logicznych (538)
- C.3. Specyfikatory formatowania, kwalifikatory i modyfikatory długości (538)
Dodatek D Specyfikatory formatu funkcji strftime() (541)
Dodatek E Podobieństwa elementów biblioteki IOStreams do biblioteki języka C (543)
- E.1. Tryby otwierania plików (543)
- E.2. Pozycjonowanie w strumieniu (544)
Dodatek F IOStreams - różnice pomiędzy implementacją klasyczną a standardową (545)
- F.1. Parametryzacja klas IOStreams (546)
- F.2. Podział klasy bazowej ios (547)
- F.3. Sygnalizowanie błędów (548)
- F.4. Umiędzynarodowienie biblioteki IOStreams (549)
- F.5. Brak klas _withassign (549)
- F.6. Brak deskryptorów plików (550)
- F.7. Strumienie ciągów znaków - stringstream zamiast strstream (551)
- F.8. Zmiany w klasach buforów strumieni (551)
- F.9. Zmiany pomniejsze (554)
Dodatek G Powiązania mechanizmów lokalizacji w C i C++ (555)
- G.1. Kategorie lokalizacji w C i C++ (555)
- G.2. Globalne obiekty lokalizacji w C i C++ (555)
Dodatek H Nowe elementy i idiomy języka C++ (559)
- H.1. Typy masek bitowych (559)
- H.2. POD (560)
- H.3. Konstruktory jawne (560)
- H.4. Specjalizacje szablonu (562)
- H.5. Domyślne argumenty szablonów (568)
- H.6. Jawna specyfikacja argumentu szablonu (571)
- H.7. SÅ‚owo typename (572)
- H.8. Rzutowanie dynamiczne (575)
- H.9. Funkcyjne bloki try (579)
- H.10. WyjÄ…tki standardowe (582)
- H.11. Ograniczenia zakresów liczbowych (583)
- H.12. Ciągi języka C++ (583)
Bibliografia (585)
Skorowidz (587)