“Modelos C ++: o guia completo” (c) 2002 - atualizado com o C ++ 11?

10

O livro C ++ Templates: The Complete Guide , (c) 2002, parece muito atraente para mim, mas como ele tem 12 anos, estou preocupado que esteja desatualizado. Existem algumas críticas da Amazon altamente favoráveis ​​datadas há um ano, e não vejo outros títulos muito recentes nos modelos C ++. Alguém sabe se um livro sobre modelos publicado em 2002 (em oposição a um livro especificamente sobre o STL) teria sintaxe ou conceitos que foram substituídos ou adicionados por, digamos, C ++ 11?

O seguinte é da descrição do livro Amazon :

Os modelos estão entre os recursos mais poderosos do C ++, mas geralmente são negligenciados, mal compreendidos e mal utilizados. Modelos C ++: O Guia Completo fornece aos arquitetos e engenheiros de software um entendimento claro de por que, quando e como usar modelos para criar e manter um software mais limpo, rápido e inteligente, com mais eficiência.

Modelos C ++ começa com um tutorial detalhado sobre conceitos básicos e recursos de linguagem. O restante do livro serve como uma referência abrangente, concentrando-se primeiro nos detalhes do idioma, depois em uma ampla variedade de técnicas de codificação e, finalmente, nos aplicativos avançados para modelos. Os exemplos usados ​​ao longo do livro ilustram conceitos abstratos e demonstram as melhores práticas.

Os leitores aprendem

  • Os comportamentos exatos dos modelos
  • Como evitar as armadilhas associadas aos modelos
  • Idiomas e técnicas, do básico ao não documentado anteriormente
  • Como reutilizar o código fonte sem ameaçar o desempenho ou a segurança
  • Como aumentar a eficiência dos programas C ++
  • Como produzir software mais flexível e sustentável
Indivíduo
fonte
2
Como a própria linguagem C ++ muda apenas lentamente (grandes mudanças são feitas apenas a cada 10 anos) e permanece amplamente compatível com versões anteriores, os livros sobre C ++ também não envelhecem tão rápido.
Bart van Ingen Schenau

Respostas:

12

Atualizado (24/08/2016)

Artigo recomendado com foco em C ++ 11:

Uma introdução ao conceito SFINAE do C ++: introspecção em tempo de compilação de um membro da classe (Jean Guegant)


Como aluno de Metaprogramação de modelos em C ++ há alguns meses, eu ainda recomendaria a leitura deste livro.

Ele não inclui o C ++ 11, mas estabelece a sintaxe e as especificações do C ++ sobre como um compilador deve processar o código do modelo. O livro aborda muitos cantos menos conhecidos que se tornarão cruciais se você precisar usar modelos C ++ substancialmente, independentemente de a metaprogramação estar ou não envolvida.


As partes ausentes do C ++ 11 são:


Há uma construção que você vai ver um monte de código que é colado em Stackoverflow: std::enable_if. No entanto, na prática, acho isso muito difícil de usar, devido à Regra de Uma Definição e à SFINAE. É por isso que este livro é importante, porque aborda o básico.


Se você usar modelos C ++ substancialmente em uma biblioteca de plataforma cruzada, precisará compilar seu código em diferentes compiladores. Isso ocorre porque cada compilador tem um nível diferente de conformidade com a especificação C ++. O código que compila bem em um pode ser rejeitado pelo outro e, ocasionalmente, o compilador que o aceita é aquele que quebra a especificação.


Aqui estão minhas anotações de leitura quando passo este livro. Espero que seja útil.

Notas de leitura do livro - Modelos C ++ - Guia Completo (2003)

  • Capítulo 2.5 - Modelos de Função - Resumo
    • Resolução de sobrecarga e práticas recomendadas
  • Ch 3.3 - Especialização de Modelos de Classe
  • Ch 3.4 - Especialização Parcial
    • Ambiguidade (erro de ODR) e como resolvê-lo. ODR = Regra de Uma Definição
  • Ch 4.3 - Restrições para Parâmetros de Modelo Não Tipo
    • Exemplo: literais de sequência com ligação externa
  • Ch 5 e Ch 6 - Estes dois capítulos são muito deprimentes. Você pode pular e voltar quando estiver emocionalmente pronto para usar modelos.

  • Parte II (Cap 8 - Cap ???) A seção de coisas avançadas.

  • Capítulo 8 - Mais regras

    • Para um programador já familiarizado com todo o Ch 3 (modelos de classe - básico), o capítulo 8.1 e 8.2 deve ser lido imediatamente após o capítulo 3, porque as regras adicionais são tão importantes e relevantes quanto as regras básicas. Isso vai economizar um pouco de dor.
  • O capítulo 8.3.1 (página 106 da 12ª impressão) menciona o SFINAE pela primeira vez.

  • Ch 8.3 - Esta seção apresenta muitas circunstâncias em que a substituição do argumento do modelo levaria a expansões sintáticas sem sentido (e, portanto, se tornaria inválida, o que, por sua vez, requer SFINAE). Este capítulo possui uma curva de aprendizado acentuada, mesmo para programadores experientes em C ++.
  • Capítulo 11 - Dedução de Argumento de Modelo

    • O Ch11 contém alguns exemplos planejados de Dedução de Argumento de Modelo que são necessários para entender alguns dos aplicativos SFINAE igualmente inventados.
  • Ch 12.4 em diante - Especialização de modelo de classe parcial.

    • Isso abrange a mecânica interna que é frequentemente solicitada em um aplicativo SFINAE.

Parte III (Ch 17 - Ch ???) Metaprogramação.

  • Ch 17 - Começa com a programação funcional introdutória.

  • Aplicativo. A.3 - Regra de Uma Definição (ODR) em detalhes.

rwong
fonte
3
O problema com uma discussão pré-C ++ 11 sobre o TMP é que ele não abordará constexpre, portanto, recomendará o TMP para toda a metaprogramação, mesmo nos casos em que constexprfunções e tipos sejam muito mais adequados.
Ben Voigt