Pergunta

Existem problemas que podem tornar o sistema de geração de código Template T4 do MS inadequados para gerar o código C ++?

Foi útil?

Solução

Pode gerar qualquer texto que você quer, incluindo o código C ++.

Outras dicas

Um pouco longa resposta ainda Acho que alguns podem achar interessante

Eu diria que T4 é excelente para gerar C ++ com

Alguns réplica poder que C ++ já tem ferramentas para fazer Metaprogramação com como:

O Preprocessor

Usando as macros de pré-processamento e de ordem mais elevada você pode conseguir um pouco que você pode fazer com T4, mas eu digo que há alguns benefícios bastante convincente de T4:

  1. O código gerado a partir de T4 é fácil de depurar e entender
  2. Metaprogramação com T4 é mais simples do que com o pré-processador. O pré-processador pode fazer macros como max / min fácil, mas quando falamos de modelos impulsionado modelo fica difícil
  3. T4 é mais poderoso do que o pré-processador, tornando mais fácil para desenvolver os modelos
  4. T4 pode ser executado como parte do processo de construção ou sob demanda

especialização de modelo parcial

Eu faço amor modelo parcial truques de especialização, mas falo por experiência própria que os amores nem todos a sua manutenção.

Eu sempre se esforçou para reduzir redundâncias de código em um esforço para aumentar a capacidade de manutenção. Além disso eu prefiro erros em tempo de compilação sobre erros em tempo de execução quando possível. Então, depois de ler Modern C ++ por Andrei Alexandrescu eu pensei que eu encontrei a resposta .

Eu escrevi um componente inspirado por este livro que funcionou muito bem, então eu fui em férias. Quando voltei a equipe tinha jogado fora o componente e reescreveu seus próprios usando técnicas tradicionais. Ele continha mais de código, foi buggier e não funcionar tão bem no entanto eles poderiam não figura como adicionar a funcionalidade para o Componente I tinha escrito e determinado que tinha que fazer isso. Nada poderia ser recuperado. Estes eram caras inteligentes também.

Eles foram errado fazê-lo? Em termos de manutenção Eu diria que eles fizeram a escolha correta, mesmo que isso me entristece.

O meu ponto com este anechdote é que T4 tem algumas vantagens sobre truques parciais modelo de especialização:

  1. O código gerado a partir de T4 é fácil de depurar e entender
  2. T4 é mais simples
  3. T4 é mais poderoso
  4. T4 pode ser executado parte do processo de construção ou sob demanda
  5. Se os mantenedores podem obter a sua cabeça em torno do modelo T4 eles ainda podem salvar o código (começar a manter o código gerado e jogar fora o modelo). Isso não foi possível no anechdote acima.

Claro em C ++ Metaprogramação é uma combinação da especialização modelo PreProcessor e parcial.

Desvantagens

Há desvantagens com T4 é claro;

  1. É Visual específica Studio (ou Mono específico). No entanto, a lata código gerado, naturalmente, ser feito para ser compilable pelo GCC e outros.
  2. É não-padrão
  3. Projetos Visual Studio C ++ não parece apoiar T4 que me obriga a usar um manequim .NET projeto para gerar o frmo código.

Resumindo

Apesar de tudo, ter perdido o interesse fazendo avançado Metaprogramação C ++ usando truques extravagantes com o pré-processador ou o sistema de tipo (eu faço usá-los para tarefas mais simples embora) e conta com T4 para que estes dias.

Se alguém está interessado em uma amostra de como fazê-lo em C ++ você poderia verificar InteractiveGraphics . É uma biblioteca para C #, VB, PowerShell e SmallBasic fazer gráficos simples. Há eu uso T4 para gerar todas as APIs e código clichê para a passagem de mensagens entre .NET e C ++ (eu não uso C ++ / CLI se eu puder evitá-lo todos) a partir de um modelo que descreve a API. Adicionando um novo método é então tão simples como estender o modelo e regenerar todos os arquivos temlate, então eu implementar um método abstrato em C ++ e fazer as coisas divertidas.

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