„Szablony C ++: kompletny przewodnik” (c) 2002 - na bieżąco z C ++ 11?

10

Książka C ++ Templates: The Complete Guide , (c) 2002, wydaje mi się bardzo atrakcyjna, ale ponieważ ma 12 lat, obawiam się, że może być nieaktualna. Istnieje kilka bardzo pozytywnych recenzji Amazon datowanych jeszcze rok temu i nie widzę żadnych innych najnowszych tytułów na szablonach C ++. Czy ktoś wie, czy książka o szablonach opublikowana w 2002 roku (w przeciwieństwie do książki o STL) miałaby składnię lub koncepcje, które zostałyby zastąpione lub dodane, powiedzmy, C ++ 11?

Poniżej znajduje się opis książki Amazon :

Szablony należą do najpotężniejszych funkcji C ++, ale zbyt często są zaniedbywane, niezrozumiane i niewłaściwie używane. Szablony C ++: Kompletny przewodnik zapewnia architektom i inżynierom oprogramowania jasne zrozumienie, dlaczego, kiedy i jak używać szablonów do tworzenia i utrzymywania czystszego, szybszego i bardziej inteligentnego oprogramowania w sposób bardziej wydajny.

Szablony C ++ zaczynają się od wnikliwego samouczka na temat podstawowych pojęć i funkcji językowych. Pozostała część książki stanowi obszerne odniesienie, najpierw skupiając się na szczegółach językowych, następnie na szerokiej gamie technik kodowania, a na końcu na zaawansowanych aplikacjach do szablonów. Przykłady użyte w książce ilustrują abstrakcyjne koncepcje i pokazują najlepsze praktyki.

Czytelnicy się uczą

  • Dokładne zachowanie szablonów
  • Jak uniknąć pułapek związanych z szablonami
  • Idiomy i techniki, od podstawowego do wcześniej nieudokumentowanego
  • Jak ponownie wykorzystać kod źródłowy bez zagrożenia wydajności lub bezpieczeństwa
  • Jak zwiększyć wydajność programów C ++
  • Jak produkować bardziej elastyczne i łatwe w utrzymaniu oprogramowanie
Facet
źródło
2
Ponieważ sam język C ++ zmienia się tylko powoli (główne zmiany są wprowadzane co 10 lat) i pozostaje w dużej mierze kompatybilny wstecz, książki na C ++ też nie starzeją się tak szybko.
Bart van Ingen Schenau

Odpowiedzi:

12

Zaktualizowano (2016/08/24)

Polecany artykuł ze szczególnym uwzględnieniem C ++ 11:

Wprowadzenie do koncepcji SFINAE w C ++: introspekcja członka klasy w czasie kompilacji (Jean Guegant)


Jako uczeń Metaprogramowania szablonów C ++ kilka miesięcy temu nadal zalecałbym przeczytanie tej książki.

Nie obejmuje C ++ 11, ale określa składnię i specyfikacje C ++ dotyczące sposobu przetwarzania kodu szablonu przez kompilator. Książka obejmuje wiele mniej znanych zakątków, które staną się kluczowe, jeśli będziesz potrzebować znacznie używać szablonów C ++, niezależnie od tego, czy w grę wchodzi metaprogramowanie.


Brakujące części z C ++ 11 to:


Nie jest konstrukt, który będzie można zobaczyć wiele w kodzie, który jest wklejony Stackoverflow: std::enable_if. Jednak w praktyce uważam, że jest to dość trudne w użyciu ze względu na Regułę Jednej Definicji i SFINAE. Właśnie dlatego ta książka jest ważna, ponieważ omawia podstawy.


Jeśli używasz szablonów C ++ zasadniczo w bibliotece wieloplatformowej, musisz przetestować kompilację kodu w różnych kompilatorach. Jest tak, ponieważ każdy kompilator ma inny poziom zgodności ze specyfikacją C ++. Kod, który kompiluje się dobrze na jednym, może zostać odrzucony przez drugi, a czasami kompilator, który go akceptuje, jest tym, który łamie specyfikację.


Oto moje notatki do czytania, kiedy czytam tę książkę. Mam nadzieję, że to będzie pomocne.

Notatki do czytania książek - Szablony C ++ - Kompletny przewodnik (2003)

  • Ch 2.5 - Szablony funkcji - Podsumowanie
    • Rozdzielczość przeciążenia i najlepsze praktyki
  • Ch 3.3 - Specjalizacja szablonów klas
  • Rozdział 3.4 - Częściowa specjalizacja
    • Niejednoznaczność (błąd ODR) i sposób jej rozwiązania. ODR = reguła jednej definicji
  • Ch 4.3 - Ograniczenia parametrów szablonów nietypowych
    • Przykład: literały łańcuchowe z zewnętrznym łącznikiem
  • Rozdział 5 i Rozdział 6 - Te dwa rozdziały są bardzo przygnębiające. Możesz go pominąć, a następnie wrócić, gdy będziesz emocjonalnie gotowy do korzystania z szablonów.

  • Część II (rozdział 8 - rozdział ???) Sekcja zaawansowanych rzeczy.

  • Rozdział 8 - Więcej zasad

    • Dla programisty znającego już całą Ch3 (szablony klas - podstawy), rozdziały 8.1 i 8.2 powinny być czytane bezpośrednio po Ch3, ponieważ dodatkowe reguły są tak samo ważne i istotne jak podstawowe reguły. Pozwoli to zaoszczędzić trochę bólu.
  • Rozdział 8.3.1 (strona 106 w 12. drukowaniu) po raz pierwszy wspomina o SFINAE.

  • Ch 8.3 - Ta sekcja wprowadza wiele okoliczności, w których podstawienie argumentów szablonowych doprowadziłoby do bezsensownych rozszerzeń składniowych (a zatem stałoby się nieważne, co w zamian wymaga SFINAE). Ten rozdział ma stromą krzywą uczenia się, nawet dla doświadczonych programistów C ++.
  • Rozdział 11 - Odliczenie argumentu szablonu

    • Rozdział 11 zawiera kilka wymyślonych przykładów odejmowania argumentów szablonów, które są niezbędne do zrozumienia niektórych równie wymyślonych aplikacji SFINAE.
  • Rozdział 12.4 i następne - Specjalizacja szablonów klas częściowych.

    • Obejmuje to wewnętrzną mechanikę, która jest często wywoływana w aplikacji SFINAE.

Część III (Ch 17 - Ch ???) Metaprogramowanie.

  • Rozdział 17 - Zaczyna się od wstępnego programowania funkcjonalnego.

  • App. A.3 - Szczegółowo reguła jednej definicji (ODR).

rwong
źródło
3
Problem z omówieniem TMP w wersji wcześniejszej niż C ++ 11 polega na tym, że nie będzie on obejmował constexpri dlatego zaleci TMP do wszystkich metaprogramowania, nawet w przypadkach, w których constexprfunkcje i typy byłyby znacznie lepiej dostosowane.
Ben Voigt,