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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top