【问题标题】:Domain Specific Language in C/C++, does this Kosher?C/C++ 中的领域特定语言,这是 Kosher 吗?
【发布时间】:2008-12-08 03:45:04
【问题描述】:

当我想到这个“奇怪”的解决方案时,我只是在为 C/C++ 中的一个新项目设计一些特定领域的语言设计:

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

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

好的部分是这在标准上是正确的(但 Duff Switch 也是如此),并且是跨平台的,可移植的等......但是这种方法实际上并不比将字符串写入代码更好,但是因为无论如何,DSL引擎都会解析字符串,这样看起来更漂亮,并且减少了混乱。但想知道其他人对此有何看法。

谢谢

【问题讨论】:

    标签: c++ c dsl


    【解决方案1】:

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

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

    【讨论】:

    • +1 用于命名空间部分,这是我没想到的一个重要点
    • 我很确定 g++ 支持可变参数宏。
    • littlenag, comeaucomputing.com/techtalk/#vc :) 确实它支持这一点。但是您使用 -Wvariadic-macros 让它警告您有关它们的使用。 (根据其手册页)
    • 我还可以验证VC8及更高版本是否支持可变参数宏。
    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 2011-02-16
    • 2010-09-06
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多