保存点是QMacros中的一种用于简化你编程的重要途径。当然,其牺牲了一点点效率来提升用性。
首先,QMacros采用了堆栈式的宏管理机制,所以在添加新宏时,如果新宏的名称与旧宏的名称,它就会覆盖旧的宏定义,从而保证当前替换操作能够正确执行。但在退出当前函数时,我们需要将相应的宏定义出栈以便恢复原始值,以保证调用我们的上层函数能够正确的执行后续的替换能够正确执行。
那么,问题来了:如果添加的宏定义比较多,一个个去Pop明显有点太啰嗦了,而保存点就是为了应付这种情况而生的:
在入栈新的宏之前,我们调用SavePoint函数,设置一个保存点。那么,在此后,我们就可以放心入栈N个宏。在需要的替换操作都完成后,我们调用Restore函数,将设置的保存点值做为参数传递进去后,剩下的TQMacroManager对象会替你将新加的N个宏全部出栈。
简单的一个步骤参考代码结构如下:
[Delphi]
var SP:Integer; begin SP:=AMacroMgr.SavePoint; try AMacroMgr.Push(....); ... finally AMacroMgr.Restore(SP); end; end;
[C++]
int SP=AMacroMgr->SavePoint(); try { AMacroMgr->Push(...); ... } __finally { AMacroMgr->Restore(SP); }