介绍(如果你不想要,请不要阅读,这只是背景)
我正在为 C++ 创建一个 API,以便它具有类似 python 的功能,而不会失去它的本质。我已经成功开发了一个自动通用异常处理系统(我在这里问如何做到这一点,@MacZamborg 告诉我它是如何工作的,所以我开始从头开始拆除所有东西)。就像我说的,我设法重载了很多东西,以便自动抛出相应的异常(它继承自 std::exception)。我唯一遇到的问题是 ZERO_DIVISION 异常,因为您似乎不能只为整数重载运算符,即参数之一必须是对象。所以我创建了 Object Num,它使用联合来存储任何可用的数字数据)-> 这意味着,我必须重载每个运算符 11 次,所以我想避免需要重载X=运算符。(也在这里问了一些关于它的事情)。
题
有没有办法在任何 IDE 中制作智能宏?什么是智能宏,你可能会问,好吧,让我们假设有一种叫做 C+++ 的新语言,它实现了智能宏 > 智能宏应该像这样 >
#define "regEx" "Literal replacement"
Run Code Online (Sandbox Code Playgroud)
在实践中:
#define '([^\d ]?\w+\s*)\+=' '$groups[0] = $groups[0] + '
Run Code Online (Sandbox Code Playgroud)
随着([^ \ d] \ w + \ S *)作为组数组中的唯一元素(语法来自python的正则表达式,我可能有一些错误,但这个想法是一样的)。regEx 的那部分将匹配任何有效的变量名(包括保留关键字 [不可取,但我们用\+=去掉它们]),也就是说,任何以空格或数字开头的单词,包含任何字符,并以空格(0 或更多)结尾。之后,它查找+=运算符,如果匹配,则将整个匹配替换为'$groups[0] = $groups[0] + ',即在唯一组中找到的任何内容(由括号表示) ), 'space' '=' 'space' '又发现了什么' 'space' '+'
所有这些都是为了避免重载+=运算符(如果可以,请阅读介绍)
听起来您想要的只是一个能够理解和扩展“智能宏”的自定义预处理器。您可以将其实现为例如转换文本文件的python 脚本。
至于如何将其集成到构建过程中,这取决于您使用的软件。
例如,make您可以执行以下操作:
%.cpp: %.cppx
mysmartpp $< > $@
Run Code Online (Sandbox Code Playgroud)
现在,如果您有一个名为 的源文件foo.cppx,make将自动调用mysmartpp foo.cppx > foo.cpp以从中创建foo.cpp。(这假设您已经编写了一个mysmartpp理解“智能宏”语法的脚本)。