Język C++. Metaprogramowanie za pomocą szablonów - Helion
Tytuł oryginału: C++ Template Metaprogramming: Concepts, Tools, and Techniques from Boost and Beyond
Tłumaczenie: Rafał Jońca
ISBN: 83-7361-935-6
stron: 336, Format: B5, okładka: miękka
Data wydania: 2005-07-12
Księgarnia: Helion
Cena książki: 39,90 zł
Metaprogramowanie to jedna z nowości, które pojawiły się ostatnio w świecie języka C++. Metaprogram to program będący w stanie modyfikować lub generować kod innego programu. Wykorzystanie zasad metaprogramowania pozwala na przykład na dynamiczną modyfikację programu podczas jego kompilacji. Pierwszym językiem pozwalającym na korzystanie z możliwości metaprogramowania jest C++ biblioteką STL.
"C++. Metaprogramowanie za pomocą szablonów" to książka przeznaczona dla tych programistów, którzy korzystają już z biblioteki STL i chcą zastosować ją do tworzenia metaprogramów. Opisano w niej zasady metaprogramowania, typy możliwe do wykorzystania w szablonach przeznaczonych do implementacji funkcji związanych z metaprogramowaniem oraz sposoby tworzenia szablonów modyfikujących programy podczas kompilacji.
- Typy i metafunkcje
- Operacje, sekwencje i iteratory
- Algorytmy biblioteki MPL i tworzenie własnych algorytmów
- Usuwanie błędów w szablonach
- Modyfikowanie programu w czasie kompilacji
- Język DSEL
Metaprogramowanie to nowość. Poznaj je już teraz, aby być przygotowanym na dzień, w którym stanie się standardem.
Spis treści
Język C++. Metaprogramowanie za pomocą szablonów -- spis treści
Przedmowa (7)
Podziękowania (9)
Struktura książki (11)
Rozdział 1. Wprowadzenie (13)
- 1.1. Zaczynamy (13)
- 1.2. Czym jest metaprogram? (14)
- 1.3. Metaprogramowanie w języku macierzystym (15)
- 1.4. Metaprogramowanie w języku C++ (15)
- 1.5. Dlaczego metaprogramowanie? (18)
- 1.6. Kiedy stosować metaprogramowanie? (20)
- 1.7. Dlaczego biblioteka metaprogramowania? (20)
Rozdział 2. Cechy typu i manipulowanie nim (23)
- 2.1. Powiązanie typów (23)
- 2.2. Metafunkcje (26)
- 2.3. Metafunkcje numeryczne (29)
- 2.4. Dokonywanie wyborów na etapie kompilacji (30)
- 2.5. Krótka podróż po bibliotece Boost Type Traits (34)
- 2.6. Metafunkcje bezargumentowe (39)
- 2.7. Definicja metafunkcji (40)
- 2.8. Historia (40)
- 2.9. Szczegóły (41)
- 2.10. Ćwiczenia (44)
Rozdział 3. Dokładniejsze omówienie metafunkcji (47)
- 3.1. Analiza wymiarowa (47)
- 3.2. Metafunkcje wyższych rzędów (56)
- 3.3. Obsługa symboli zastępczych (58)
- 3.4. Więcej możliwości lambdy (60)
- 3.5. Szczegóły implementacji lambda (61)
- 3.6. Szczegóły (64)
- 3.7. Ćwiczenia (66)
Rozdział 4. Operacje i otoczki typów całkowitych (69)
- 4.1. Operacje i otoczki typu logicznego (69)
- 4.2. Operacje i otoczki liczb całkowitych (76)
- 4.3. Ćwiczenia (80)
Rozdział 5. Sekwencje i iteratory (83)
- 5.1. Pojęcia (83)
- 5.2. Sekwencje i algorytmy (84)
- 5.3. Iteratory (85)
- 5.4. Pojęcia związane z iteratorem (85)
- 5.5. Pojęcia sekwencji (89)
- 5.6. Równość sekwencji (94)
- 5.7. Wewnętrzne operacje sekwencji (94)
- 5.8. Klasy sekwencji (95)
- 5.9. Otoczki sekwencji liczb całkowitych (99)
- 5.10. Wyprowadzanie sekwencji (100)
- 5.11. Pisanie własnych sekwencji (101)
- 5.12. Szczegóły (110)
- 5.13. Ćwiczenia (111)
Rozdział 6. Algorytmy (115)
- 6.1. Algorytmy, idiomy, wielokrotne użycie i abstrakcja (115)
- 6.2. Algorytmy biblioteki MPL (117)
- 6.3. Insertery (118)
- 6.4. Podstawowe algorytmy sekwencji (121)
- 6.5. Algorytmy zapytań (123)
- 6.6. Algorytmy budowania sekwencji (123)
- 6.7. Pisanie własnych algorytmów (126)
- 6.8. Szczegóły (127)
- 6.9. Ćwiczenia (128)
Rozdział 7. Widoki i adaptery iteratorów (131)
- 7.1. Kilka przykładów (131)
- 7.2. Pojęcie widoku (137)
- 7.3. Adaptery iteratora (137)
- 7.4. Tworzenie własnego widoku (138)
- 7.5. Historia (140)
- 7.6. Ćwiczenia (140)
Rozdział 8. Diagnostyka (143)
- 8.1. Powieść o poprawianiu błędów (143)
- 8.2. Korzystanie z narzędzi do analizy wyników diagnostyki (152)
- 8.3. Zamierzone generowanie komunikatów diagnostycznych (156)
- 8.4. Historia (167)
- 8.5. Szczegóły (167)
- 8.6. Ćwiczenia (168)
Rozdział 9. Przekraczanie granicy między czasem kompilacji i wykonywania programu (171)
- 9.1. Algorytm for_each (171)
- 9.2. Wybór implementacji (174)
- 9.3. Generatory obiektów (178)
- 9.4. Wybór struktury (180)
- 9.5. Złożenie klas (184)
- 9.6. Wskaźniki na funkcje (składowe) jako argumenty szablonów (187)
- 9.7. Wymazywanie typu (189)
- 9.8. Wzorzec zadziwiajÄ…co powracajÄ…cego szablonu (195)
- 9.9. Jawne zarządzanie zbiorem przeciążeń (200)
- 9.10. Sztuczka z sizeof (202)
- 9.11. Podsumowanie (203)
- 9.12. Ćwiczenia (203)
Rozdział 10. Język osadzony zależny od dziedziny (205)
- 10.1. Mały język... (205)
- 10.2. ...przechodzi długą drogę (208)
- 10.3. Języki DSL - podejście odwrotne (215)
- 10.4. C++ jako język gospodarza (218)
- 10.5. Blitz++ i szablony wyrażeń (220)
- 10.6. Języki DSEL ogólnego stosowania (225)
- 10.7. Biblioteka Boost Spirit (234)
- 10.8. Podsumowanie (240)
- 10.9. Ćwiczenia (241)
Rozdział 11. Przykład projektowania języka DSEL (243)
- 11.1. Automaty skończone (243)
- 11.2. Cele projektu szkieletu (246)
- 11.3. Podstawy interfejsu szkieletu (247)
- 11.4. Wybór języka DSL (248)
- 11.5. Implementacja (254)
- 11.6. Analiza (259)
- 11.7. Kierunek rozwoju języka (261)
- 11.8. Ćwiczenia (261)
Dodatek A Wprowadzenie do metaprogramowania za pomocÄ… preprocesora (265)
- A.1. Motywacja (265)
- A.2. Podstawowe abstrakcje preprocesora (267)
- A.3. Struktura biblioteki preprocesora (269)
- A.4. Abstrakcje biblioteki preprocesora (269)
- A.5. Ćwiczenie (286)
Dodatek B SÅ‚owa kluczowe typename i template (287)
- B.1. Zagadnienia (288)
- B.2. Reguły (291)
Dodatek C Wydajność kompilacji (299)
- C.1. Model obliczeniowy (299)
- C.2. ZarzÄ…dzanie czasem kompilacji (302)
- C.3. Testy (302)
Dodatek D Podsumowanie przenośności biblioteki MPL (315)
Bibliografia (317)
Skorowidz (321)