A metaprogramação estática (também conhecida como "metaprogramação de modelo") é uma ótima técnica C ++ que permite a execução de programas em tempo de compilação. Uma lâmpada 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 a metaprogramação estática C ++, quais são as melhores fontes (livros, sites, material didático on-line, qualquer coisa)?
c++
templates
metaprogramming
jwfearn
fonte
fonte
Respostas:
[Respondendo minha própria pergunta]
As melhores introduções que encontrei até agora são o capítulo 10, "Static Metaprogramming in C ++" de Generative Programming, Methods, Tools, and Applications de Krzysztof Czarnecki e Ulrich W. Eisenecker, ISBN-13: 9780201309775; e capítulo 17, "Metaprograms" of C ++ Templates: The Complete Guide de David Vandevoorder e Nicolai M. Josuttis, ISBN-13: 9780201734843.
Todd Veldhuizen tem um excelente tutorial aqui .
Um bom recurso para programação C ++ em geral é Modern C ++ Design de Andrei Alexandrescu, ISBN-13: 9780201704310. Este livro mistura um pouco de metaprogramação com outras técnicas de modelo. Para metaprogramação em particular, consulte as seções 2.1 "Asserções de tempo de compilação", 2.4 "Mapeamento de constantes integrais para tipos", 2.6 "Seleção de tipo", 2.7 "Detecção de conversibilidade e herança em tempo de compilação", 2.9 "
NullType
eEmptyType
" e 2.10 "Traços de tipo "O melhor recurso intermediário / avançado que encontrei é C ++ Template Metaprogramming de David Abrahams e Aleksey Gurtovoy, ISBN-13: 9780321227256
Se você preferir apenas um livro, obtenha Modelos C ++: o guia completo, pois também é a referência definitiva para modelos em geral.
fonte
O livro Modern C ++ Design de Andrei Alexandrescu cobre muitos desses e outros truques para código C ++ moderno, rápido e eficiente, e é a base para a biblioteca Loki .
Também vale a pena mencionar as bibliotecas Boost , que usam muito essas técnicas e geralmente são de muito alta qualidade para se aprender (embora algumas sejam bastante densas).
fonte
Modern C ++ Design , um livro brilhante e estrutura de padrões de design de Alexandrescu. Um aviso, depois de ler este livro parei de fazer C ++ e pensei "Que diabos, posso simplesmente escolher uma linguagem melhor e obtê-la de graça".
fonte
Dois bons livros que vêm à mente são:
É um campo bastante aprofundado, então um bom livro como um desses é definitivamente recomendado para sites. Algumas das técnicas mais avançadas farão com que você estude o código por algum tempo para descobrir como eles funcionam!
fonte
C ++ moderno é uma das melhores introduções que já li. Ele cobre exemplos úteis reais de metaprogramação de template. Também dê uma olhada na biblioteca associada Loki .
fonte
Não haverá uma lista grande de livros, pois a lista de pessoas com muita experiência é limitada. A metaprogramação de template começou para valer em torno do primeiro C ++ Template Programming Workshop em 2000, e muitos dos autores citados até agora compareceram. (IIRC, Andrei não.) Esses pioneiros influenciaram muito o campo, e basicamente o que deveria ser escrito agora está escrito. Pessoalmente, eu aconselharia Vandevoorde & Josuttis. O livro de Alexandrescu é difícil se você é novo no campo.
fonte
Os artigos originais de Veldhuizen eram bons. Se você quiser um livro inteiro, então há o livro de Vandevoorde, "Guia completo dos modelos C ++". E quando você estiver pronto para o curso de mestrado, experimente o Modern C ++ Design de Alexandrescu.
fonte
google Alexandrescu, Modern C ++ Design: Generic Programming and Design Patterns Applied
fonte