Lenguaje específico de dominio en C / C ++, ¿esto es kosher?
Pregunta
Estaba jugando con algunos diseños de Lenguaje Específico de Dominio para un nuevo proyecto en C / C ++ cuando pensé en esto "extraño". solución:
define DSL(...) MakeCommand(#__VA_ARGS__\
)->Exec()->GetResults()
MyResults results = DSL( for p in people do something );
Lo bueno es que esto es correcto según los estándares (pero también lo es un Duff Switch) y multiplataforma, portátil, etc. Sin embargo, este método no es realmente mejor que escribir cadenas en el código, pero desde El motor DSL analiza las cadenas de todos modos, parece más bonito de esta manera y reduce el desorden. Pero me preguntaba qué piensan otras personas al respecto.
Gracias
Solución
Hmm, mientras que las macros variables son C99, no son posibles en C ++. No lo haría así :) Una función dsl simple que toma una std :: string
o cualquier clase de cadena que use su marco, y devuelve MakeCommand (str) - > Exec () - > GetResults ()
sería mi opción preferida, ya que es más fácil de depurar, y puede ponerlo en un espacio de nombres.
También podrá construir cadenas de comandos dinámicamente y pasarlas a la función. Usando su enfoque macro, pasar una variable str
en realidad pasaría " str "
a la función MakeCommand. Necesitaría otra macro para comandos dinámicos para que funcione, con lo que no me sentiría cómodo.