Статическое метапрограммирование (также известное как «метапрограммирование шаблонов») - отличный метод 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++, каковы лучшие источники (книги, веб-сайты, онлайн-курсы и т. д.)?
Выключенный. Определенно прочь.





Google Александреску, «Современный дизайн на C++: применение общих шаблонов программирования и проектирования»
Современный C++ - одно из лучших введений, которые я читал. Он охватывает реальные полезные примеры метапрограммирования шаблонов. Также обратите внимание на сопутствующую библиотеку Локи.
Книга Андрея Александреску Современный дизайн C++ охватывает множество этих и других приемов быстрого и эффективного современного кода C++ и является основой для библиотеки Локи.
Также стоит упомянуть библиотеки Способствовать росту, которые активно используют эти методы и обычно имеют очень высокое качество для обучения (хотя некоторые из них довольно плотны).
Оригинальные документы Вельдхёйзена были хорошими. Если вам нужна целая книга, то есть книга Вандевурда «Полное руководство по шаблонам C++». А когда вы будете готовы к магистерскому курсу, попробуйте «Современный дизайн C++» Александреску.
Современный дизайн C++, блестящая книга и структура шаблонов проектирования Александреску. Предупреждение: после прочтения этой книги я перестал заниматься C++ и подумал: «Какого черта, я могу просто выбрать язык получше и получить его бесплатно».
«Какого черта, я могу просто выбрать язык получше и получить его бесплатно» Мммм, что ты имеешь в виду? Особенно меня смущает "бесплатно". А какой еще язык вы имели в виду?
Метапрограммирование шаблонов C++ дает вам всевозможные новые возможности, такие как передача типов или списка типов в качестве аргументов и т. д. Большинство этих возможностей присутствует в динамически типизированных языках, таких как python, с более приятным синтаксисом.
Если вы ищете язык, на котором можно быстро писать правильные программы, Python лучше, чем C++. Если вам нужны другие возможности C++, добавление Lisp-подобных возможностей в C++ может быть лучше, чем попытки C++ на другом языке.
На ум приходят две хорошие книги:
Это довольно глубокая область знаний, поэтому такую хорошую книгу, как одну из них, определенно рекомендуется рекомендовать, а не веб-сайтам. Некоторые из более продвинутых методов заставят вас некоторое время изучать код, чтобы понять, как они работают!
[Отвечая на свой вопрос]
Лучшие введения, которые я нашел до сих пор, - это глава 10 «Статическое метапрограммирование в C++» из Генеративное программирование, методы, инструменты и приложения Кшиштофа Чарнецкого и Ульриха В. Эйзенекера, ISBN-13: 9780201309775; и глава 17 «Метапрограммы» Шаблоны C++: полное руководство Дэвида Вандевурдера и Николая М. Джосаттиса, ISBN-13: 9780201734843.




У Тодда Велдхуизена есть отличный учебник здесь.
Хорошим ресурсом для программирования на C++ в целом является Современный дизайн C++ Андрея Александреску, ISBN-13: 9780201704310. В этой книге метапрограммирование сочетается с другими методами шаблонов. Для метапрограммирования, в частности, см. Разделы 2.1 «Утверждения времени компиляции», 2.4 «Отображение интегральных констант на типы», 2.6 «Выбор типа», 2.7 «Определение конвертируемости и наследования во время компиляции», 2.9 «NullType и EmptyType» и 2.10 » Типовые черты ".
Лучший ресурс среднего / продвинутого уровня, который я нашел, - это Метапрограммирование шаблонов C++ Дэвида Абрахамса и Алексея Гуртового, ISBN-13: 9780321227256.
Если вы предпочитаете только одну книгу, получите Шаблоны C++: полное руководство, так как это также исчерпывающий справочник по шаблонам в целом.
Ссылка на статью Тодда Вельдхейзена устарела.
Я верю в это: www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/…
ссылка исправлена, спасибо!
Ссылка снова не работает!
ссылка исправлена, спасибо @Paul
Спасибо @jwfearn, я прочитал статью, хотя мне она показалась более интересной: youtube.com/watch?v=Am2is2QCvxY (она состоит из двух частей). Это доклад Уолтера Э. Брауна: «Современное метапрограммирование шаблонов: сборник статей».
@ Пол, спасибо за ссылки на презентации Уолтера. Чистое золото!
Список книг не будет большим, так как список людей с большим опытом ограничен. Метапрограммирование шаблонов по-настоящему началось примерно на первом семинаре по программированию шаблонов C++ в 2000 году, и многие из авторов, названных до сих пор, посетили. (IIRC, Андрей - нет.) Эти пионеры сильно повлияли на эту область, и в основном то, что должно быть написано, уже написано. Лично я бы посоветовал Vandevoorde & Josuttis. Книга Александреску - трудная книга, если вы новичок в этой области.
лампочка погасла или загорелась?