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
Odpowiedzi:
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:
is_*
.decltype
. http://en.cppreference.com/w/cpp/language/decltypedeclval
. http://en.cppreference.com/w/cpp/utility/declvalmove
http://en.cppreference.com/w/cpp/utility/moveforward
http://en.cppreference.com/w/cpp/utility/forwardNie 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)
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
Rozdział 8.3.1 (strona 106 w 12. drukowaniu) po raz pierwszy wspomina o SFINAE.
Rozdział 11 - Odliczenie argumentu szablonu
Rozdział 12.4 i następne - Specjalizacja szablonów klas częściowych.
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).
źródło
constexpr
i dlatego zaleci TMP do wszystkich metaprogramowania, nawet w przypadkach, w którychconstexpr
funkcje i typy byłyby znacznie lepiej dostosowane.