Langage de domaine spécifique en C / C ++, est-ce kasher?
Question
Je pensais justement à quelques conceptions de langage spécifique au domaine pour un nouveau projet en C / C ++ lorsque j'ai pensé à cela "odd". solution:
define DSL(...) MakeCommand(#__VA_ARGS__\
)->Exec()->GetResults()
MyResults results = DSL( for p in people do something );
Ce qu'il y a de bien, c'est que c'est correct selon les normes (mais c'est aussi un commutateur Duff), et multiplate-forme, portable, etc. De toute façon, le moteur DSL analyse les chaînes, il semble plus joli de cette façon et réduit l'encombrement. Mais je me demandais ce que les autres en pensent.
Merci
La solution
Hmm, bien que les macros variadiques soient C99, elles ne sont pas possibles en C ++. Je ne le ferais pas comme ça :) Une simple fonction dsl prenant un std :: string
ou la classe de chaîne utilisée par votre framework, et renvoyant MakeCommand (str) - > Exec () - > GetResults ()
serait mon option préférée, car elle est plus conviviale pour le débogage et vous pouvez la placer dans un espace de noms.
Vous pourrez également créer des chaînes de commande de manière dynamique et les transmettre à la fonction. En utilisant votre approche de macro, transmettre une variable str
transmettrait en réalité "str" ??à la fonction MakeCommand. Vous aurez besoin d’une autre macro pour que les commandes dynamiques fonctionnent, ce avec quoi je ne serais pas à l’aise.