Linguaggio specifico del dominio in C / C ++, questo Kosher?
Domanda
Stavo solo scherzando con alcuni progetti di Linguaggi specifici di dominio per un nuovo progetto in C / C ++ quando ho pensato a questo "strano". Soluzione:
define DSL(...) MakeCommand(#__VA_ARGS__\
)->Exec()->GetResults()
MyResults results = DSL( for p in people do something );
La parte bella è che questo è corretto per gli standard (ma lo è anche un Duff Switch), multipiattaforma, portatile, ecc ... Tuttavia questo metodo non è davvero meglio di scrivere stringhe nel codice, ma poiché il Il motore DSL analizza comunque le stringhe, sembra più carino in questo modo e riduce il disordine. Ma mi chiedevo cosa ne pensano gli altri.
Grazie
Soluzione
Hmm, mentre le macro variadiche sono C99, non sono possibili in C ++. Non lo farei così :) Una semplice funzione dsl che prende un std :: string
o qualunque classe di stringa usi il tuo framework e restituisce MakeCommand (str) - > Exec () - > GetResults ()
sarebbe la mia opzione preferita, poiché è più facile da eseguire il debug e puoi inserirla in uno spazio dei nomi.
Sarai anche in grado di creare dinamicamente stringhe di comando e passarle alla funzione. Usando il tuo approccio macro, passare una variabile str
passerebbe effettivamente " str "
alla funzione MakeCommand. Avresti bisogno di un'altra macro per i comandi dinamici per farlo funzionare, che non mi farebbe comodo.