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

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top