Melhor introdução à metaprogramação de modelos C++?




templates metaprogramming (6)

Dois bons livros que vêm à mente são:

  • Modern C ++ Design / Andrei Alexandrescu (na verdade tem 7 anos apesar do nome!)
  • Modelos C ++: O Guia Completo / Vandevoorde & Josuttis

É um campo bastante aprofundado, então um bom livro como um deles é definitivamente recomendado em sites. Algumas das técnicas mais avançadas farão você estudar o código por algum tempo para descobrir como elas funcionam!

A metaprogramação estática (também conhecida como "metaprogramação de modelos") é uma ótima técnica de C ++ que permite a execução de programas em tempo de compilação. Uma lâmpada se acendeu na minha cabeça assim que li este exemplo de metaprogramação canônica:

#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;
}

Se alguém quiser aprender mais sobre metaprogramação estática em C ++, quais são as melhores fontes (livros, sites, cursos on-line, etc.)?


Não haverá uma lista grande de livros, pois a lista de pessoas com muita experiência é limitada. A metaprogramação de modelos começou de verdade em torno do primeiro Workshop de Programação de Modelos C ++ em 2000, e muitos dos autores mencionados até agora participaram. (IIRC, Andrei não). Esses pioneiros influenciaram muito o campo, e basicamente o que deveria ser escrito agora está escrito. Pessoalmente, aconselho Vandevoorde & Josuttis. Alexandrescu é um livro difícil se você é novo no campo.


Os documentos originais de Veldhuizen eram bons. Se você gosta de um livro inteiro, então há o livro de Vandevoorde "C ++ Templates Complete Guide". E quando estiver pronto para o curso de mestrado, experimente o Modern C ++ Design de Alexandrescu.


google alexandrescu, design moderno em c ++: programação genérica e padrões de design aplicados


Modern C ++ é uma das melhores introduções que li. Cobre exemplos úteis reais de metaprogramação de modelos. Também dê uma olhada na biblioteca do companheiro Loki .


[Respondendo minha própria pergunta]

As melhores introduções que encontrei até agora são o capítulo 10, "Metaprogramação estática em C ++", de Generative Programming, Methods, Tools, and Applications, de Krzysztof Czarnecki e Ulrich W. Eisenecker, ISBN-13: 9780201309775; e capítulo 17, "Metaprograms" de modelos de C ++: o guia completo por David Vandevoorder e Nicolai M. Josuttis, ISBN-13: 9780201734843.

Todd Veldhuizen tem um excelente tutorial here .

Um bom recurso para programação C ++ em geral é o Modern C ++ Design de Andrei Alexandrescu, ISBN-13: 9780201704310. Este livro mistura um pouco de metaprogramação com outras técnicas de template. Para metaprogramação em particular, consulte as seções 2.1 "Asserções em tempo de compilação", 2.4 "Mapeando constantes integrais para tipos", 2.6 "Seleção de tipo", 2.7 "Detectando conversibilidade e herança em tempo de compilação", 2.9 " NullType e EmptyType " e 2.10 " Digite traços ".

O melhor recurso intermediário / avançado que encontrei é a Metaprogramação de Modelos C ++, de David Abrahams e Aleksey Gurtovoy, ISBN-13: 9780321227256.

Se você preferir apenas um livro, obtenha Modelos C ++: O Guia Completo, pois ele também é a referência definitiva para modelos em geral.







metaprogramming