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


112

Статичне метапрограмування (він же "метапрограмування шаблонів") - це чудова техніка С ++, яка дозволяє виконувати програми під час компіляції. Як тільки я прочитав цей приклад канонічного метапрограмування, у мене в голові згасла лампочка:

#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 ++, які найкращі джерела (книги, веб-сайти, он-лайн курси тощо)?


43
лампочка вимкнулася "вимкнено" чи "увімкнено"?
horseyguy

36
Вимкнено. Однозначно вимкнено.
Томас Едінг

Відповіді:


108

[Відповідаючи на власне запитання]

Найкращі знайомства, які я знайшов до цього часу, - це глава 10, "Статичне метапрограмування в C ++" з генеративного програмування, методів, інструментів та застосувань Кшиштофа Чарнецького та Ульріха В. Ейзенекера, ISBN-13: 9780201309775; та глава 17, "Метапрограми" шаблонів C ++: Повний посібник Девіда Вандевоарда та Ніколая Йосуттіса, ISBN-13: 9780201734843.

alt текст alt текст alt текст alt текст

Todd 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 ++: Повне керівництво, оскільки це також остаточне посилання на шаблони загалом.


2
Посилання на твір Тодда Велдхуйзена застаріло.
Джон Р. Стром


1
посилання виправлено зараз, дякую!
jwfearn

Посилання знову розірвано!
Пол

1
Дякую @jwfearn, я прочитав статтю, хоча мені здалося, що це цікавіше: youtube.com/watch?v=Am2is2QCvxY (він має дві частини). Це розмова Вальтера Е. Брауна: Сучасна метапрограмування шаблонів: Компендіум
Пол,

24

Книга " Сучасний дизайн C ++" Андрія Олександреску охоплює багато цього та інших хитрощів для швидкого та ефективного сучасного коду C ++ і є основою для бібліотеки Локі .

Варто також згадати бібліотеки Boost , які активно використовують ці методи і зазвичай мають дуже високу якість для навчання (хоча деякі з них досить щільні).


12

Сучасний дизайн C ++ , блискуча рамка книги та дизайну від Олександреску. Слово попередження, прочитавши цю книгу, я перестав робити C ++ і подумав "Що за чорт, я можу просто вибрати кращу мову і отримати її безкоштовно".


5
"Що за чорт, я можу просто вибрати кращу мову та отримати її безкоштовно" Уммм, що ти маєш на увазі? Мене особливо бентежить "безкоштовно". А яку ще мову ви мали на увазі?
Поп Каталін

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

1
Якщо ви шукаєте мову, на якій можете швидко писати правильні програми, Python краще, ніж C ++. Якщо вам потрібні деякі інші речі, які надає C ++, додавання Lisp-подібної можливості до C ++ може бути кращим, ніж намагання C ++ - якщо іншою мовою.
Девід Торнлі

6

Дві хороші книги, які мені спадають на думку:

  • Сучасний дизайн C ++ / Андрій Олександреску (насправді 7 років, незважаючи на ім'я!)
  • Шаблони C ++: Повне керівництво / Vandevoorde & Josuttis

Це досить глибоке поле, тому хороша книга, як одна з них, безумовно, рекомендується на веб-сайтах. Деякі з вдосконалених методів змусять вас вивчати код деякий час, щоб зрозуміти, як вони працюють!


5

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


5

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


4

Оригінальні папери Вельдхуйзена були хорошими. Якщо ви готові до цілої книги, то є книга Вандевуарда "Повне керівництво по шаблонах C ++". І коли ви будете готові до магістерського курсу, спробуйте сучасний дизайн C ++ Олександреску.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.