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

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

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

的好处是,这是正确的标准(但这样是达夫开关),以及跨平台,可移植,等...不过这个方法实在是没有什么比写字符串转换成代码更好,但由于DSL引擎解析字符串不管怎么说,这似乎看起来更漂亮这种方式,减少了混乱。但不知道什么等民间考虑一下吧。

由于

有帮助吗?

解决方案

嗯,而可变参数宏是C99,它们不可能在C ++。我不会那样做:)一个简单的DSL功能采取std::string或任何字符串类的框架使用,并返回MakeCommand(str)->Exec()->GetResults()将是我的首选,因为它更调试友好的,你可以把它变成一个命名空间。

您还可以动态地建立命令串,并将其传递给该函数。使用宏的方式,传递一个str变量实际上传递"str"到MakeCommand功能。你会需要另一个宏动态命令,使其工作,这也是我不舒服。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top