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

StackOverflow https://stackoverflow.com/questions/112277

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

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

Лучшее введение, которое я нашел на данный момент, - это глава 10 "Статическое метапрограммирование в C ++" из Генеративное программирование, Методы, инструменты и приложения by Krzysztof Czarnecki and Ulrich W.Айзенекер, ISBN-13:9780201309775;и глава 17, "Метапрограммы" Шаблоны C ++:Полное Руководство Дэвид Вандевордер и Николай М.Джосуттис, ISBN-13:9780201734843.

alt text alt text alt text alt text

У Тодда Вельдхейзена есть отличный учебник здесь.

Хорошим ресурсом для программирования на 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 ++ и является основой для Локи библиотека.

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

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

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

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

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

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

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

Оригинальные статьи Велдхейзена были хороши.Если вам нужна целая книга, то есть книга Вандевурда "Полное руководство по шаблонам C ++".А когда вы будете готовы к магистерскому курсу, попробуйте современный дизайн Александреску на C ++.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top