4

この「奇妙な」解決策を考えたとき、C/C++ の新しいプロジェクトのドメイン固有言語の設計をいじっていました。

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

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

良い点は、これが標準で正しいことです (ただし、Duff Switch もそうです)、クロスプラットフォーム、移植可能などです...ただし、この方法は実際には文字列をコードに書き込むよりも優れているわけではありませんが、DSL エンジンが解析するためです。とにかく、このようにするときれいに見え、混乱が減ります。しかし、他の人々がそれについてどう思うか疑問に思っていました.

ありがとう

4

1 に答える 1

6

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

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

于 2008-12-08T03:52:46.740 に答える