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
Respostas:
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:
is_*
será exibida.decltype
. http://en.cppreference.com/w/cpp/language/decltypedeclval
. http://en.cppreference.com/w/cpp/utility/declvalmove
http://en.cppreference.com/w/cpp/utility/moveforward
http://en.cppreference.com/w/cpp/utility/forwardHá 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)
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
O capítulo 8.3.1 (página 106 da 12ª impressão) menciona o SFINAE pela primeira vez.
Capítulo 11 - Dedução de Argumento de Modelo
Ch 12.4 em diante - Especialização de modelo de classe parcial.
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.
fonte
constexpr
e, portanto, recomendará o TMP para toda a metaprogramação, mesmo nos casos em queconstexpr
funções e tipos sejam muito mais adequados.