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

лампочка погасла или загорелась?

horseyguy 04.05.2010 22:58

Выключенный. Определенно прочь.

Thomas Eding 30.08.2012 23:05
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
114
2
60 257
8
Перейти к ответу Данный вопрос помечен как решенный

Ответы 8

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

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

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

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

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

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

«Какого черта, я могу просто выбрать язык получше и получить его бесплатно» Мммм, что ты имеешь в виду? Особенно меня смущает "бесплатно". А какой еще язык вы имели в виду?

Pop Catalin 22.09.2008 02:16

Метапрограммирование шаблонов C++ дает вам всевозможные новые возможности, такие как передача типов или списка типов в качестве аргументов и т. д. Большинство этих возможностей присутствует в динамически типизированных языках, таких как python, с более приятным синтаксисом.

Florian Bösch 23.09.2008 15:04

Если вы ищете язык, на котором можно быстро писать правильные программы, Python лучше, чем C++. Если вам нужны другие возможности C++, добавление Lisp-подобных возможностей в C++ может быть лучше, чем попытки C++ на другом языке.

David Thornley 26.03.2009 23:03

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

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

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

Ответ принят как подходящий

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

Лучшие введения, которые я нашел до сих пор, - это глава 10 «Статическое метапрограммирование в C++» из Генеративное программирование, методы, инструменты и приложения Кшиштофа Чарнецкого и Ульриха В. Эйзенекера, ISBN-13: 9780201309775; и глава 17 «Метапрограммы» Шаблоны C++: полное руководство Дэвида Вандевурдера и Николая М. Джосаттиса, ISBN-13: 9780201734843.

alt textalt textalt textalt 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++: полное руководство, так как это также исчерпывающий справочник по шаблонам в целом.

Ссылка на статью Тодда Вельдхейзена устарела.

John R. Strohm 06.12.2012 20:51

Я верю в это: www10.informatik.uni-erlangen.de/~pflaum/pflaum/ProSeminar/…

0fnt 30.01.2013 18:12

ссылка исправлена, спасибо!

jwfearn 16.02.2013 01:01

Ссылка снова не работает!

Paul 08.09.2015 09:09

ссылка исправлена, спасибо @Paul

jwfearn 08.09.2015 19:08

Спасибо @jwfearn, я прочитал статью, хотя мне она показалась более интересной: youtube.com/watch?v=Am2is2QCvxY (она состоит из двух частей). Это доклад Уолтера Э. Брауна: «Современное метапрограммирование шаблонов: сборник статей».

Paul 08.09.2015 21:42

@ Пол, спасибо за ссылки на презентации Уолтера. Чистое золото!

jwfearn 05.01.2016 06:44

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

Другие вопросы по теме