質問

この<!> quot; odd <!> quotを考えたとき、C / C ++の新しいプロジェクトのドメイン固有言語の設計にだまされていました。解決策:

 define DSL(...) MakeCommand(#__VA_ARGS__\
                              )->Exec()->GetResults()

 MyResults results = DSL( for p in people do something );

良い部分は、これが標準(Duff Switchも同様)で正しいこと、クロスプラットフォーム、ポータブルなどです。ただし、この方法は文字列をコードに書き込むよりも優れていますが、 DSLエンジンはとにかく文字列を解析し、このようにきれいに見えるようで、混乱を減らします。しかし、他の人々はそれについてどう思うか疑問に思っていました。

ありがとう

役に立ちましたか?

解決

うーん、可変長マクロはC99ですが、C ++では使用できません。私はそのようにはしません:) std::stringまたはフレームワークが使用する任意の文字列クラスを取り、MakeCommand(str)->Exec()->GetResults()を返す単純なdsl関数は、よりデバッグしやすいので、私が好むオプションです。名前空間。

また、コマンド文字列を動的に作成し、関数に渡すこともできます。マクロアプローチを使用して、str変数を渡すと、実際にはMakeCommand関数に"str"が渡されます。動的コマンドを機能させるには、別のマクロが必要になりますが、これは使いにくいでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top