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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top