Лучшее введение в метапрограммирование шаблонов С++?
Статическое метапрограммирование (он же "метапрограммирование шаблонов" ) - отличный метод С++, который позволяет выполнять программы во время компиляции. В моей голове появилась лампочка, как только я прочитал этот пример канонического метапрограммирования:
#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;
}
Если вы хотите узнать больше о статическом метапрограммировании на С++, какие лучшие источники (книги, веб-сайты, онлайн-курсы, что угодно)?
Ответы
Ответ 1
[Отвечая на мой собственный вопрос]
Лучшие интродукции, которые я нашел до сих пор, - это глава 10 "Статическое метапрограммирование в С++" из Generative Programming, Methods, Tools и приложений Кшиштофа Чарнецкого и Ульриха В. Эйзенкера, ISBN-13: 9780201309775; и глава 17 "Метапрограммы" шаблонов С++: полное руководство Дэвида Вандевоордера и Николая М. Йосуттиса, ISBN-13: 9780201734843.
alt text http://ak.buy.com/db_assets/prod_images/941/30676941.jpg alt text http://ak.buy.com/db_assets/prod_images/235/31025235.jpg alt text http://ak.buy.com/db_assets/prod_images/704/30680704.jpg alt text http://ak.buy.com/db_assets/prod_images/218/39856218.jpg
У Тодда Велдхуйзена есть отличный учебник здесь.
Хорошим ресурсом для программирования на C++ в целом является Modern С++ Design от Andrei Alexandrescu, ISBN-13: 9780201704310. Эта книга смешивает немного метапрограммирования с другими методами шаблонов. Для метапрограммирования, в частности, см. Разделы 2.1 "Утверждения времени компиляции", 2.4 "Сопоставление интегральных констант с типами", 2.6 "Выбор типа", 2.7 "Обнаружение конвертируемости и наследования во время компиляции", 2.9 "NullType
и EmptyType
" и 2.10 "Черты типа".
Лучший промежуточный/расширенный ресурс, который я нашел, - это метапрограммирование С++, написанное Дэвидом Абрахамом и Алексеем Гуртовым, ISBN-13: 9780321227256
Если вы предпочитаете только одну книгу, получите С++ Templates: The Complete Guide, так как это также окончательная ссылка для шаблонов в целом.
Ответ 2
Andrei Alexandrescu Современный дизайн С++. В книге описывается много этого и других трюков для быстрого и эффективного современного кода на С++ и является основой для < библиотека href= "http://loki-lib.sourceforge.net/" rel= "noreferrer" > Loki.
Также стоит упомянуть библиотеки Boost, которые в значительной степени используют эти методы и обычно имеют очень высокое качество, чтобы учиться (хотя некоторые довольно плотные).
Ответ 3
Современный дизайн С++, блестящая структура шаблонов книг и дизайна от Alexandrescu. Слово предупреждения, прочитав эту книгу, я перестал делать С++ и подумал: "Что, черт возьми, я могу просто выбрать лучший язык и получить его бесплатно".
Ответ 4
Две хорошие книги, на которые spring на ум:
- Современный дизайн С++/Андрей Александреску (на самом деле это 7 лет, несмотря на название!)
- С++ Шаблоны: Полное руководство /Vandevoorde и Josuttis
Это довольно углубленное поле, поэтому хорошая книга, подобная одной из них, определенно рекомендуется по сайтам. Некоторые из более продвинутых методов заставят вас некоторое время изучать код, чтобы выяснить, как они работают!
Ответ 5
Не будет большого списка книг, так как список людей с большим опытом ограничен. Метапрограммирование шаблонов началось в реальном времени вокруг первого семинара по программированию шаблонов на С++ в 2000 году, и многие из авторов, которые до сих пор присутствовали. (IIRC, Андрей этого не сделал.) Эти пионеры оказали большое влияние на поле, и в основном то, что должно быть написано, теперь написано. Лично я советовал Вандевордду и Йосуттису. Alexandrescu - сложная книга, если вы новичок в этой области.
Ответ 6
Современный С++ - одна из лучших презентаций, которые я прочитал. Он охватывает фактические полезные примеры метапрограммирования шаблонов. Также взгляните на библиотеку компаньонов Loki.
Ответ 7
Вельдхуйзен оригинальные работы были хорошими. Если вы за целую книгу, то там Vandevoorde книга "С++ Templates Complete Guide". И когда вы будете готовы к мастер-курсу, попробуйте Alexandrescu Modern С++ Design.
Ответ 8
google Alexandrescu, Modern С++ Design: общие шаблоны программирования и дизайна Прикладные