【问题标题】:C++ operator overloading for embedded DSL language in C++ [closed]C++ 中嵌入式 DSL 语言的 C++ 运算符重载 [关闭]
【发布时间】:2016-07-29 22:20:50
【问题描述】:

是否可以使用 C++ 运算符重载并为 C++ 中的嵌入式 DsL 代码创建类似 DSL 的语法。

"a": auto = call("add2Numbers", "b", "c");

这就是我想要的理想状态。但任何接近此的有效 C++ 都是可以接受的。

【问题讨论】:

  • 那实际上应该做什么?我怀疑你可以做任何诡计来制作这种有效的 c++ 语法。 (我很清楚 DSL 是什么)
  • #if 0 #endif 括起来在技术上使它成为有效的C++,但你可能想要一些事情发生。什么?
  • 只要我能够将这里存在的所有信息存储在某个 C++ 对象中,我就很好。然后我可以以某种方式处理它。
  • 您可以查看 Boost:Spirit 以了解运算符重载以完成您想要的操作。
  • 我的一种形式是 call("a", "auto", "add2numbers", "b", c")。这很好,但可读性较差。我正在努力提高可读性

标签: c++ operator-overloading


【解决方案1】:

好建议:不要。 C++ 是一种大型的多用途语言,并且已经足够复杂了。如果您随机更改内容,您 迷惑人们(以及您自己!)。特别是运算符重载和建议的预处理器应该小心处理。

我对你的建议是编写你需要的函数。你举了一个关于某种赋值的例子(对不起,不理解给定的代码),我相信完全有可能编写一个具有方便接口的函数来实现你想要做的事情。优点是您的合成器保持所有C++ 并且可能的读者(以及您未来的自己)不会感到困惑。

我希望我正确理解了您的问题。如果不是,请纠正我。

菲利克斯

【讨论】:

  • 由于我不知道你对C++编程有多好,需要注意的是你可以通过引用一个函数来传递你的变量。通过引用传递意味着您仍然在函数中使用原始传递的变量,并且对它的更改也适用于调用函数的变量(例如main())。我不知道这是否对您有帮助;我只是想声明这是存在的。
猜你喜欢
  • 2017-08-04
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多