Najlepsze wprowadzenie do metaprogramowania szablonów C++? [zamknięte]

Statyczne metaprogramowanie (ang. "template metaprogramming") jest świetną techniką C++, która pozwala na wykonywanie programów w czasie kompilacji. Żarówka zgasła mi w głowie, jak tylko przeczytałem ten kanoniczny przykład 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 C++, jakie są najlepsze źródła (książki,strony internetowe, courseware on-line, cokolwiek)?

Author: Georg Fritzsche, 2008-09-22

8 answers

[odpowiadając na moje własne pytanie]

Najlepsze wprowadzenie, jakie dotychczas znalazłem, to Rozdział 10, "statyczne Metaprogramowanie w C++" z Generative Programming, Methods, Tools, and Applications autorstwa Krzysztofa Czarneckiego i Ulricha W. Eiseneckera, ISBN-13: 9780201309775; oraz Rozdział 17, "Metaprogramy" z C++ Templates: The Complete Guide autorstwa Davida Vandevoordera i Nicolai M. Josuttisa, ISBN-13: 9780201734843.

Alt text http://ak.buy.com/db_assets/prod_images/941/30676941.jpg alt text http://ak.buy.com/db_assets/prod_images/235/31025235.jpg alt text http://ak.buy.com/db_assets/prod_images/704/30680704.jpg alt text http://ak.buy.com/db_assets/prod_images/218/39856218.jpg

Todd Veldhuizen ma doskonały samouczek tutaj. [[2]} dobrym źródłem do programowania C++ w ogóle jest Nowoczesne projektowanie C++ Andrei Alexandrescu, ISBN-13: 9780201704310. Ta książka łączy trochę metaprogramowania z innymi technikami szablonów. Metaprogramowanie w szczególności, patrz sekcje 2.1 "Assertions-Time Compile", 2.4 "Mapping Integral Constants to Types", 2.6 "Type Selection", 2.7" Detecting Convertibility and Inheritance at Compile Time", 2.9" NullType and EmptyType "oraz 2.10"Type Traits".

Najlepszy średniozaawansowany / Zaawansowany zasób znalazłem C++ Template Metaprogramming David Abrahams i Aleksey Gurtovoy, 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.

 102
Author: jwfearn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-08 16:08:15

Książka Andrei Alexandrescu Modern C++ Design zawiera wiele tego i innych trików do szybkiego i wydajnego nowoczesnego kodu C++ i jest podstawą biblioteki Loki .

Warto również wspomnieć o bibliotekachBoost , które w dużym stopniu wykorzystują te techniki i są zazwyczaj bardzo wysokiej jakości do nauki (choć niektóre są dość gęste).

 23
Author: Alaric,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-04 17:13:26

Modern C++ Design, genialna Książka i design pattern framework autorstwa Alexandrescu. Słowo ostrzeżenia, po przeczytaniu tej książki przestałem robić C++ i pomyślałem "Co mi tam, mogę po prostu wybrać lepszy język i dostać go za darmo".

 12
Author: Florian Bösch,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 21:56:47

Dwie dobre książki, które przychodzą na myśl to:

  • Modern C++ Design / Andrei Alexandrescu (mimo nazwy ma już 7 lat!)
  • C++ Templates: The Complete Guide / Vandevoorde & Josuttis

Jest to dość dogłębna dziedzina, więc dobra książka, taka jak jedna z nich, jest zdecydowanie polecana na stronach internetowych. Niektóre z bardziej zaawansowanych technik pozwoli Ci studiować Kod przez jakiś czas, aby dowiedzieć się, jak działają!

 6
Author: Nik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 21:59:23
 5
Author: Eclipse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 21:54:51

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ę na poważnie wokół pierwszych warsztatów programowania szablonów C++ w 2000 roku, a wielu autorów wymienionych do tej pory wzięło udział. (IIRC, Andrei Nie.) Ci pionierzy znacznie wpłynęli na dziedzinę, a w zasadzie to, co powinno być napisane, jest teraz napisane. Osobiście radziłbym Vandevoorde & Josuttis. Alexandrescu to trudna książka, jeśli jesteś nowy w tej dziedzinie.

 5
Author: MSalters,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 22:40:25

Oryginalne papiery Veldhuizena były dobre. Jeśli masz ochotę na całą książkę, to jest książka Vandevoorde "C++ Templates Complete Guide". A kiedy będziesz gotowy do kursu mistrzowskiego, spróbuj nowoczesnego projektowania C++ Alexandrescu.

 4
Author: eduffy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 21:56:39

Google Alexandrescu, Modern C++ Design: Generic Programming and Design Patterns Applied

 4
Author: Maxim Ananyev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-09-21 23:01:33