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++ 中是不可能的。我不会那样做 :) 一个简单的 dsl 函数采用std::string框架使用的或任何字符串类,并返回MakeCommand(str)->Exec()->GetResults()将是我的首选,因为它对调试更友好,并且您可以将其放入命名空间。

您还可以动态构建命令字符串并将其传递给函数。使用您的宏方法,传递一个str变量实际上会传递"str"给 MakeCommand 函数。您将需要另一个用于动态命令的宏才能使其工作,我对此感到不舒服。

于 2008-12-08T03:52:46.740 回答