Acabei de iniciar minha jornada como desenvolvedor de C ++ e recentemente pesquisei um tópico chamado metaprogramação. Até agora, passei por muitas informações sobre o assunto e tenho poucas perguntas.
Uso da reflexão em c ++: é possível? De acordo com meu entendimento, a reflexão é uma técnica de metaprogramação que tem a capacidade de manipular um estado de um programa e sua manipulação pode ser introspecção ou introcessão.
Qual é a diferença entre arquitetura reflexiva e arquitetura de meta-nível? Em qual categoria a arquitetura de metaprogramação se enquadra?
A metaprogramação vem em dois níveis: meta-nível e base. No meu entendimento, o programa de objetos ou o sistema sob investigação é o nível básico, e o meta programa que irá operar sobre o sistema sob investigação é o nível meta. Estou correcto?
Também me ajude, fornecendo algumas diretrizes sobre como trabalhar na metaprogramação de modelos em C ++.
Você pode me sugerir alguns exemplos viáveis que eu possa procurar para trabalhar nessa técnica de programação?
Respostas:
Metaprogramação significa simplesmente que você tem os meios para escrever código que escreve outro código (em um sentido amplo). O C ++ faz isso através do mecanismo de modelo, que é basicamente uma linguagem de macro com segurança de tipo. É perfeitamente possível aplicar apenas a etapa de expansão do modelo, e o resultado será um código C ++ sem modelo válido.
Reflexão é a capacidade de uma linguagem de programação e / ou ambiente de tempo de execução para inspecionar (e freqüentemente modificar) seus próprios elementos de linguagem em tempo de execução. Normalmente, as linguagens reflexivas oferecem estruturas de dados que representam elementos da linguagem, como classes, métodos, variáveis, parâmetros, etc., bem como rotinas ou classes para inspecionar, modificar e criá-las. A capacidade de modificação faz da reflexão um tipo de metaprogramação, pois permite escrever código que gera outro código.
Outros exemplos de metaprogramação incluem geradores de código, binários auto-modificadores (apesar de não serem tão populares hoje em dia como eram há duas décadas), macros C; poder-se-ia argumentar que o curry e técnicas semelhantes de programação funcional também são uma espécie de metaprogramação.
fonte
2-3. Não sei - aguarde outra resposta que ajude com isso :-)
Meta programação usando modelos C ++ é muito poderosa, mas também complexa. A expansão do modelo requer um estilo funcional de programação, em vez de uma programação imperativa que o C ++ usa. Se você não tem experiência anterior com programação funcional, recomendo que você faça um desvio e aprenda um pouco de linguagem, haskell ou esquema.
fonte