2008-12-08 74 views
4

我正和一些领域特定语言的设计在C/C++,当我想到了这个“奇怪”的解决方案一个新的项目鬼混:C/C++中的域特定语言,这个犹太教吗?

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

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

的好处是,这是由标准正确的(但Duff Switch也是如此),以及跨平台,便携式等等。然而,这种方法并不比将字符串写入代码更好,但由于DSL引擎总是对字符串进行解析,因此它看起来看起来更漂亮,并且减少混乱。但是想知道其他人怎么看待它。

感谢

回答

6

嗯,而复杂的宏是C99,他们不可能在C++。我不会那样做:)一个简单的dsl函数采用std::string或者你的框架使用的任何字符串类,并且返回MakeCommand(str)->Exec()->GetResults()将是我的首选选项,因为它对调试更友好,并且可以将它放入命名空间。

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

+0

+1为命名空间部分,这是相当大的一点,我没有通过 – 2008-12-08 03:54:32