我正在创建一个项目,尝试创建一种新的语言来制作宏,问题是名为 X 的宏有两种不同的用途:1)用括号关闭函数调用,如下所示 );},where ;结束代码行并 } 关闭代码块,有时我只想 ;}。总结,我需要做一个聪明的技巧,有时行后的预处理器行理解 X 需要是 );} 或 ;} .我可以用 if else 语句来做到这一点吗?或者以某种方式去掉 if need!
我尝试了一些条件值的实现,其中,(codition?state1:state2),但这被翻译为来自预处理器的tring。此外,每次其他宏调用#undef X时,我都尝试从其他宏中尝试并根据我的操作重新定义线等
预处理器不够复杂,无法实现诸如上下文相关替换之类的操作!
看看它的标准化方式,我认为这是故意的。
简而言之:您无法构建需要此功能的 DSL。老实说,现代 C++ 足够灵活,您可以在 C++ 本身中构建 DSL,但您当然仍然受到 C++ 通用语法的约束。如果您需要其他东西,我想说 C++ 和标准预处理器可能 不是您需要的工具。