Pergunta

estático metaprogramming (aka "template metaprogramming") é uma técnica de grande C ++ que permite a execução de programas em tempo de compilação. Uma luz se acendeu na minha cabeça assim que eu ler este exemplo metaprogramming 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 saber mais sobre metaprogramação estática C ++, quais são as melhores fontes (livros, sites, on-line de cursos, seja qual for)?

Foi útil?

Solução

[Respondendo a minha própria pergunta]

As melhores apresentações que eu encontrei até agora são o capítulo 10, "Static Metaprogramação em C ++" de Programação Generative, métodos, ferramentas e aplicativos por Krzysztof Czarnecki e Ulrich W. Eisenecker, ISBN- 13: 9780201309775; e capítulo 17, "Metaprogramas" de C ++ Templates: The Complete Guia por David Vandevoorder e Nicolai M. Josuttis, ISBN-13:. 9780201734843

text alt text alt text alt text alt

Todd Veldhuizen tem um excelente tutorial aqui .

Um bom recurso para C ++ programação em geral é Projeto ++ Modern C por Andrei Alexandrescu, ISBN-13: 9780201704310. Este livro mistura um pouco de metaprogramming com outras técnicas de modelo. Para metaprogramação em particular, ver secções 2.1 "em tempo de compilação afirmações", 2,4 "Mapeando constantes integral para Tipos", 2,6 "Type Selection", 2,7 "Detectando Conversibilidade e Herança em tempo de compilação", 2,9 "NullType e EmptyType" e 2.10 " tipo Traços".

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

Se você preferir apenas um livro, obter C ++ Templates:. O Guia Completo , uma vez que também é a referência definitiva para modelos em geral

Outras dicas

href="http://erdani.com/index.php/books/modern-c-design/" rel="noreferrer"> projeto ++ de Andrei Alexandrescu capas de livros um monte de presente e outros truques para código rápida e eficiente C ++ moderno e é a base para a biblioteca Loki .

Também vale a pena mencionar é bibliotecas impulso , que fortemente usar estas técnicas e geralmente são de altíssima qualidade para aprender a partir de ( embora alguns são bastante denso).

Projeto ++ Modern C , um quadro livro e padrão de design brilhante por Alexandrescu. Palavra de aviso, depois de ler este livro eu parei de fazer C ++ e pensei "Que diabos, eu posso apenas escolher uma linguagem melhor e obtê-lo gratuitamente".

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

  • Modern C ++ projeto Andrei Alexandrescu / (É realmente 7 anos de idade, apesar do nome!)
  • C ++ Templates: The Complete Guia / Vandevoorde & Josuttis

É um campo muito em profundidade, por isso um bom livro como um deles é definitivamente recomendado sobre websites. Algumas das técnicas mais avançadas terá que estudar o código por algum tempo para descobrir como eles funcionam!

Modern C ++ é uma das melhores introduções que eu li. Abrange exemplos úteis reais de modelo metaprogramming. Também dê uma olhada na biblioteca companheiro Loki .

Não haverá uma grande lista de livros, como a lista de pessoas com muita experiência é limitada. modelo metaprogramming começou para valer em torno do primeiro modelo C ++ Programação Oficina em 2000, e muitos dos autores com o nome até agora participaram. (IIRC, Andrei não o fez.) Esses pioneiros influenciou muito o campo, e, basicamente, o que deve ser escrito agora está escrito. Pessoalmente, eu aconselhá Vandevoorde & Josuttis. Alexandrescu do é um livro difícil se você é novo para o campo.

papéis originais de Veldhuizen eram bons. Se você se de um livro inteiro, então não há livro de Vandevoorde "C ++ Templates Complete Guide". E quando você está pronto para o curso de mestrado, tente de Alexandrescu Modern C Projeto ++.

O Google Alexandrescu, design ++ Modern C: programação genérica e Padrões de Projeto Aplicada

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top