La cosa più vicina che riesco a pensare è MetaC:
link
(Già menzionato da FrustratedWithFormsDesigner alcuni giorni fa)
Metti da parte questo, ci sono un certo numero di altri sistemi basati sul preprocessore C che può essere usato (o abusato) per questo compito. Dai un'occhiata a Boost.Preprocessore, ad esempio:
link
Oppure P99 e ABCPP:
link
link
Nonostante ciò, ti consiglio caldamente di utilizzare uno strumento di generazione del codice in piena regola per questa attività (come già ha fatto Brian).
Tutti i suddetti strumenti basati sul preprocessore, alla fine, sono solo modi contorti per eseguire una sorta di generazione di codice. Potresti semplicemente implementare il tuo strumento di generazione del codice completo e ben educato. Ruby, Python e Perl offrono molti buoni strumenti per questo. Ad esempio, Ruby ha il proprio framework di modellazione e generazione del codice:
link
link
Molti altri esistono per altri linguaggi di scripting. Potresti anche usare un motore di template normalmente usato per lo sviluppo di applicazioni web, come Cheetah (basato su Python):
link
Dai anche un'occhiata al framework WLang generico basato su Ruby:
link
Usando un linguaggio di scripting per scopi generici e una struttura di generazione del codice, finirai per sviluppare una vera applicazione indipendente che interrogherà il tuo DB e genererà metadati e codice di conseguenza. Può sembrare una soluzione grande e complicata, ma in realtà è più semplice da scrivere e molto più gestibile rispetto a quella basata su un preprocessore (perché un linguaggio di scripting completo è molto più potente e flessibile del preprocessore C).
Inoltre, dal tuo "elenco di richieste di funzionalità" ho la sensazione che nessuno degli strumenti esistenti basati sul preprocessore possa essere usato per il tuo compito "così com'è" perché il preprocessore C non può facilmente trattare con un DB e perché molto probabilmente il tuo compito richiederà un processo a due passaggi (un passaggio per interrogare il DB e generare i metadati richiesti e un secondo per generare il codice C dai metadati).
Questo può essere un altro motivo per utilizzare un linguaggio di scripting in piena regola.