这是一个很现实的问题,比如我们定义了宏的开始符号为 “[” ,宏的结束符为 “]”,那么如果我们要在模板中包含 “[” 和 “]” 该怎么办呢?
答案就是宏转义,我们可以定义宏 MacroStart , MacroEnd 分别对应下面的宏定义,然后入栈如下:
AMarcoMgr.Push('MacroStart','['); AMacroMgr.Push('MacroEnd',']');
那么我们在模板中要输入 “[” 和 “]” 时就可以用下面的方式来代替:
[MacroStart] Now is [MacroEnd]
这样子,我们执行替换操作就会被替换为:
[ Now is ]
从而避免错误格式的解析而造成宏替换失败。
当然,上面的只是一个例子,你可以根据需要选择更好的解决方案。这一方案实际上和HTML的转义思路是一样的。