Статическое метапрограммирование (также известное как «шаблонное метапрограммирование») - это отличный метод 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 ++, каковы лучшие источники (книги, веб-сайты, онлайн-курсы и т. Д.)?
c++
templates
metaprogramming
jwfearn
источник
источник
Ответы:
[Отвечая на свой вопрос]
Лучшие введения, которые я нашел до сих пор, - это глава 10 «Статическое метапрограммирование в C ++» из книги « Генеративное программирование, методы, инструменты и приложения » Кшиштофа Чарнецкого и Ульриха В. Эйзенекера, ISBN-13: 9780201309775; и глава 17 «Метапрограммы» шаблонов C ++: полное руководство Дэвида Вандевурдера и Николая М. Джозаттиса, ISBN-13: 9780201734843.
Тодд Veldhuizen имеет отличный учебник здесь .
Хороший ресурс для программирования на C ++ в целом - это Modern C ++ Design Андрея Александреску, ISBN-13: 9780201704310. В этой книге метапрограммирование сочетается с другими методами шаблонов. Для метапрограммирования, в частности, см. Разделы 2.1 «Утверждения времени компиляции», 2.4 «Отображение интегральных констант на типы», 2.6 «Выбор типа», 2.7 «Определение конвертируемости и наследования во время компиляции», 2.9 «
NullType
иEmptyType
» и 2.10 «Признаки типов. ".Лучший ресурс среднего / продвинутого уровня, который я нашел, - это метапрограммирование шаблонов C ++ Дэвида Абрахамса и Алексея Гуртового, ISBN-13: 9780321227256
Если вы предпочитаете только одну книгу, скачайте C ++ Templates: The Complete Guide, так как это также исчерпывающий справочник по шаблонам в целом.
источник
Книга Андрея Александреску « Современный дизайн C ++» охватывает множество этих и других приемов быстрого и эффективного современного кода C ++ и является основой библиотеки Loki .
Также стоит упомянуть библиотеки Boost , которые активно используют эти методы и обычно очень высокого качества для обучения (хотя некоторые из них довольно плотны).
источник
Современный дизайн C ++ , блестящая книга и структура шаблонов проектирования Александреску. Предупреждение: после прочтения этой книги я перестал заниматься C ++ и подумал: «Какого черта, я могу просто выбрать язык получше и получить его бесплатно».
источник
На ум приходят две хорошие книги:
Это довольно глубокая область, поэтому хорошая книга, подобная одной из этих, определенно рекомендуется вместо веб-сайтов. Некоторые из более продвинутых методов заставят вас некоторое время изучить код, чтобы понять, как они работают!
источник
Современный C ++ - одно из лучших введений, которые я читал. Он охватывает реальные полезные примеры метапрограммирования шаблонов. Также взгляните на сопутствующую библиотеку Loki .
источник
Список книг не будет большим, так как список людей с большим опытом ограничен. Метапрограммирование шаблонов по-настоящему началось примерно на первом семинаре по программированию шаблонов C ++ в 2000 году, и многие из авторов, названных до сих пор, посетили. (IIRC, Андрей - нет.) Эти пионеры сильно повлияли на эту область, и в основном то, что должно быть написано, уже написано. Лично я бы посоветовал Vandevoorde & Josuttis. "Александреску" - трудная книга, если вы новичок в этой области.
источник
Оригинальные документы Велдхёйзена были хорошими. Если вам нужна целая книга, то есть книга Вандевурда «Полное руководство по шаблонам C ++». А когда вы будете готовы к магистерской программе, попробуйте «Современный дизайн C ++» Александреску.
источник
Google Александреску, Современный дизайн на C ++: применение общих шаблонов программирования и проектирования
источник