Лучшее введение в метапрограммирование шаблонов C++? [закрытый]


статическое метапрограммирование (он же "шаблон метапрограммирования") является отличным методом C++, который позволяет выполнять программы во время компиляции. Как только я прочитал этот канонический пример метапрограммирования, у меня в голове загорелась лампочка:

#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;
}

Если вы хотите узнать больше о статическом метапрограммировании C++, каковы лучшие источники (книги, веб-сайты, онлайн-курсы, что угодно)?

8 107

8 ответов:

[ответ на мой собственный вопрос]

лучшие введения, которые я нашел до сих пор, - это Глава 10, "статическое метапрограммирование в C++" от генеративное Программирование, методы, инструменты и приложения Кшиштоф Чарнецкий и Ульрих У. Айзенекер, ISBN-13: 9780201309775; и Глава 17, "метапрограммы"Шаблоны C++: Полное Руководство David Vandevoorder и Nicolai M. Josuttis, ISBN-13: 9780201734843.

alt текст http://ak.buy.com/db_assets/prod_images/941/30676941.jpg alt текст http://ak.buy.com/db_assets/prod_images/235/31025235.jpg alt текст http://ak.buy.com/db_assets/prod_images/704/30680704.jpg alt текст http://ak.buy.com/db_assets/prod_images/218/39856218.jpg

Тодд Veldhuizen имеет отличный учебник здесь.

хорошим ресурсом для программирования на C++ в целом является Современный C++ Дизайн Андрей Александреску, ISBN-13: 9780201704310. Эта книга немного смешивает метапрограммирование с другими шаблонными техниками. Для метапрограммирования, в частности, см. разделы 2.1 "утверждения времени компиляции", 2.4 "отображение интегральных констант в Типы", 2.6 "выбор типа", 2.7 "обнаружение конвертируемости и наследования во время компиляции", 2.9"NullType и EmptyType" и 2.10 "тип характера".

лучший промежуточный / расширенный ресурс, который я нашел, это Шаблонов C++ Метапрограммирование Дэвид Абрахамс и Алексей Гуртовой, ISBN-13: 9780321227256

Если вы предпочитаете только одну книгу, сделать Шаблоны C++: Полное Руководство так как это также окончательная ссылка для шаблонов в целом.

Андрея Александреску Современный Дизайн C++ книга охватывает много этого и других трюков для быстрого и эффективного современного кода C++ и является основой для Локи библиотека.

также стоит упомянуть Boost библиотеки, которые активно используют эти методы и, как правило, очень высокого качества учиться (хотя некоторые из них довольно плотная).

Современный Дизайн C++, блестящая книга и Дизайн Шаблон рамки Александреску. Слово предупреждения, после прочтения этой книги я перестал делать C++ и подумал: "Какого черта, я могу просто выбрать лучший язык и получить его бесплатно".

две хорошие книги, которые приходят на ум:

  • современный дизайн C++ / Андрей Александреску (ему на самом деле 7 лет, несмотря на название!)
  • Шаблоны C++: Полное Руководство / Vandevoorde & Josuttis

Это довольно глубокое поле, поэтому хорошая книга, Как один из них, безусловно, рекомендуется на веб-сайтах. Некоторые из более продвинутых методов заставят вас изучить код в течение некоторого времени, чтобы выяснить, как они работают!

Современный C++ это одно из лучших введений, которые я читал. Он охватывает фактические полезные примеры шаблона метапрограммирования. Также взгляните на сопутствующую библиотеку Локи.

большого списка книг не будет, так как список людей с большим опытом ограничен. Метапрограммирование шаблонов началось по-настоящему вокруг первого семинара по программированию шаблонов C++ в 2000 году, и многие из названных авторов до сих пор присутствовали. (IIRC, Андрей не сделал.) эти пионеры сильно повлияли на поле, и в основном то, что должно быть написано, теперь написано. Лично я бы посоветовал Vandevoorde & Josuttis. Александреску-это жесткая книга, если вы новичок в этой области.

оригинальные документы Veldhuizen были хороши. Если вы готовы к целой книге, то есть книга Vandevoorde "C++ Templates Complete Guide". И когда вы будете готовы к магистерскому курсу, попробуйте современный дизайн Александреску C++.

Гугл Александреску, Современное проектирование на С++: обобщенное программирование и прикладные шаблоны проектирования