--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-unsubscribe@googlegroups.com
Para mais opções, visite http://groups.google.com/group/ccppbrasil
--~--~---------~--~----~--~-~--~---~----~------------
Algum motivo em particular pra preferir essa abordagem ao invés de algo mais similar a uma vtable na classe abstrata?
Na minha opinião, a saída do teu gerador é complexa demais, eu odiaria fazer manutenção nesse código.
Recentemente, tive que modificar uma biblioteca escrita em C para adicionar suporte a membros genéricos a algumas structs. Minha solução foi fazer com que todos os tipos concretos que eu quis suportar "herdassem" uma struct abstrata (teu gerador não mostra a definição das estruturas concretas, mas imagino que ambos usamos a mesma estratégia pra isso), e essa estrutura abstrata guardava um ponteiro pra uma função "polimórfica". Isso significa que todos os "objetos" devem ser criados a partir de uma única função que inicializa os ponteiros corretamente, mas essa também é uma limitação da tua abordagem por causa dos IDs, a diferença principal é que não é preciso criar uma função genérica com um switch gigantesco pra cada uma das funções que tu quer implementar. Minha abordagem para conversões também foi mais simples, mas porque eu não me preocupei com type safety (nada vai impedir alguém de dar um cast pra um tipo incompatível ao invés de usar as macros).
Me perdoe se minha explicação foi abstrata demais, se quiser um exemplo eu preciso de um pouco mais de tempo pra preparar.
e pq nao usar "C + ou -" (ou C com classes) ao inves disso?
--
Antes de enviar um e-mail para o grupo leia:
http://www.ccppbrasil.org/wiki/Lista:AntesdePerguntar
--~--~---------~--~----~------------------------------
[&] C & C++ Brasil - http://www.ccppbrasil.org/
Para sair dessa lista, envie um e-mail para ccppbrasil-unsubscribe@googlegroups.com
Fiz um gerador de "casts" e funcoes "virtuais"para criar um tipo de polimorfismo em C.O tipo de polimorfismo usa um id intrusivo por instancia.Existem ponteiros para os tipos que pode apontar para diferentes tipos concretos.A pagina carrega um exemplo simples.O trabalho do gerador eh explodir os tipos e achar as instancias criando os possiveis casts e tambemum exemplo de chamada de funcao polimorfica.Estes casts sao defines que alem de fazer o cast deixam o fonte mais seguro por nao usar nenhum cast foçado.os defines guiam o programador para os casts permitidos.
No objetivo final, qualquer semelhança com o original CFront é mera coincidencia...