预处理器#值的多重定义

问题描述 投票:0回答:1

我正在创建一个项目,尝试创建一种新的语言来制作宏,问题是名为 X 的宏有两种不同的用途:1)用括号关闭函数调用,如下所示 );},where ;结束代码行并 } 关闭代码块,有时我只想 ;}。总结,我需要做一个聪明的技巧,有时行后的预处理器行理解 X 需要是 );} 或 ;} .我可以用 if else 语句来做到这一点吗?或者以某种方式去掉 if need!

我尝试了一些条件值的实现,其中,(codition?state1:state2),但这被翻译为来自预处理器的tring。此外,每次其他宏调用#undef X时,我都尝试从其他宏中尝试并根据我的操作重新定义线等

c++ macros dsl
1个回答
0
投票

预处理器不够复杂,无法实现诸如上下文相关替换之类的操作!

看看它的标准化方式,我认为这是故意的。

简而言之:您无法构建需要此功能的 DSL。老实说,现代 C++ 足够灵活,您可以在 C++ 本身中构建 DSL,但您当然仍然受到 C++ 通用语法的约束。如果您需要其他东西,我想说 C++ 和标准预处理器可能 不是您需要的工具

© www.soinside.com 2019 - 2024. All rights reserved.