Metaprogramowanie statyczne (inaczej „metaprogramowanie szablonów”) to doskonała technika C ++, która umożliwia wykonywanie programów w czasie kompilacji. Żarówka zgasła w mojej głowie, gdy tylko przeczytałem ten przykład kanonicznego metaprogramowania:
#include <iostream>
using namespace std;
template< int n >
struct factorial { enum { ret = factorial< n - 1 >::ret * n }; };
template<>
struct factorial< 0 > { enum { ret = 1 }; };
int main() {
cout << "7! = " << factorial< 7 >::ret << endl; // 5040
return 0;
}
Jeśli ktoś chce dowiedzieć się więcej o metaprogramowaniu statycznym w C ++, jakie są najlepsze źródła (książki, strony internetowe, kursy online, cokolwiek)?
c++
templates
metaprogramming
jwfearn
źródło
źródło
Odpowiedzi:
[Odpowiadając na moje własne pytanie]
Najlepsze wprowadzenia, jakie do tej pory znalazłem, to rozdział 10, „Metaprogramowanie statyczne w C ++” z książki Generative Programming, Methods, Tools, and Applications autorstwa Krzysztofa Czarneckiego i Ulricha W. Eiseneckera, ISBN-13: 9780201309775; oraz rozdział 17, „Metaprogramy” C ++ Templates: The Complete Guide , David Vandevoorder i Nicolai M. Josuttis, ISBN-13: 9780201734843.
Todd Veldhuizen ma tutaj doskonały poradnik .
Dobrym źródłem do programowania w C ++ w ogóle jest Modern C ++ Design autorstwa Andrei Alexandrescu, ISBN-13: 9780201704310. Ta książka łączy trochę metaprogramowania z innymi technikami szablonowymi. W szczególności dotyczące metaprogramowania, zobacz sekcje 2.1 „Asercje w czasie kompilacji”, 2.4 „Mapowanie stałych całkowych na typy”, 2.6 „Wybór typu”, 2.7 „Wykrywanie konwertowalności i dziedziczenia w czasie kompilacji”, 2.9 "
NullType
iEmptyType
" oraz 2.10 "Cechy typu ”.Najlepszym źródłem dla średnio zaawansowanych / zaawansowanych, jakie znalazłem, jest C ++ Template Metaprogramming autorstwa Davida Abrahamsa i Alekseya Gurtovoya, ISBN-13: 9780321227256
Jeśli wolisz tylko jedną książkę, pobierz C ++ Templates: The Complete Guide, ponieważ jest to również ostateczne odniesienie do szablonów w ogóle.
źródło
Książka Andrei Alexandrescu o nowoczesnym projekcie C ++ obejmuje wiele z tych i innych sztuczek dotyczących szybkiego i wydajnego nowoczesnego kodu C ++ i jest podstawą dla biblioteki Loki .
Warto również wspomnieć o bibliotekach Boost , które intensywnie korzystają z tych technik i są zwykle bardzo wysokiej jakości, z których można się uczyć (chociaż niektóre są dość gęste).
źródło
Nowoczesny projekt C ++ , genialny framework do tworzenia książek i wzorców projektowych autorstwa Alexandrescu. Słowo ostrzeżenia, po przeczytaniu tej książki przestałem robić C ++ i pomyślałem "Co do cholery, mogę po prostu wybrać lepszy język i dostać go za darmo".
źródło
Dwie dobre książki, które przychodzą mi do głowy to:
Jest to dość obszerna dziedzina, więc dobra książka, taka jak jedna z tych, jest zdecydowanie zalecana na stronach internetowych. Niektóre z bardziej zaawansowanych technik pozwolą ci przestudiować kod przez jakiś czas, aby dowiedzieć się, jak działają!
źródło
Nowoczesne C ++ to jedno z najlepszych wprowadzeń, jakie przeczytałem. Obejmuje rzeczywiste użyteczne przykłady metaprogramowania szablonów. Przyjrzyj się także towarzyszącej bibliotece Loki .
źródło
Nie będzie dużej listy książek, ponieważ lista osób z dużym doświadczeniem jest ograniczona. Metaprogramowanie szablonów zaczęło się naprawdę wokół pierwszych warsztatów programowania szablonów w języku C ++ w 2000 roku, w których uczestniczyło wielu autorów wymienionych do tej pory. (IIRC, Andrei nie.) Ci pionierzy wywarli wielki wpływ na tę dziedzinę i zasadniczo to, co powinno być napisane, jest teraz napisane. Osobiście radziłbym Vandevoorde i Josuttisowi. Alexandrescu to trudna książka, jeśli jesteś nowy w tej dziedzinie.
źródło
Oryginalne dokumenty Veldhuizena były dobre. Jeśli masz ochotę na całą książkę, to jest książka Vandevoorde „Kompletny przewodnik po szablonach C ++”. A kiedy będziesz gotowy na kurs magisterski, wypróbuj Modern C ++ Design Alexandrescu.
źródło
google Alexandrescu, nowoczesny projekt C ++: ogólne programowanie i stosowane wzorce projektowe
źródło