[QMacros]-基本使用方法说明

1、创建一个TQMacroManager对象,它用来管理所有的宏。后面所有的操作都必需基于它。

[Delphi]

[C++]

2、将基本的宏入栈,注意确定宏的类型。具体请参考主题中的【QMacros宏的值稳定性选项详解】一文的说明。

(1)、入栈常量

[Delphi]

[C++]

(2)、入栈通过函数动态返回值的宏

首先,我们需要定义一个宏的取值函数,目前只支持类的成员函数,首先看下回调函数的类型说明。

[Delphi]

[C++]

根据上面的声明,我们声明自己的回调函数实现,然后通过Push函数入栈。入栈时,可以为函数指定一个用户自定义的附加数据,在回调函数中可以通过TQMacroItem的Value.Value的Tag成员来访问。

入栈回调函数实现的宏时,再次强调需要注意其函数值的稳定性。默认值是考虑最糟糕的情况,使用的mvVolatile,但实际上,如果在一次替换操作中,其值是不变的,那么,mvStable是最佳的选择。如果无论何时始终不变,那么直接调用第一种方式Push我想更合适,或者设定类型为mvImmutable。

我们看下这种Push方法的声明:

[Delphi]

[C++]

对于Delphi 2007及更早的版本,UnicodeString替换为WideString,后面的代码规则相同,请自行脑补。

3、执行模板的编译及替换操作

(1)、简化版接口

TQMacroManager提供了两个Replace函数,分别对应于两个版本的替换函数。其中简化版的接口定义如下:

[Delphi]

[C++]

此函数将直接编译并完成替换后释放编译结果。

(2)、完整版本

完整版本由用户自己控制编译和替换过程,从而实现一次编译,多次运行,避免重复的编译开销,加快批量替换时的效率。

编译操作由函数Complie负责完成,我们看它的参数会发现和上面的Replace简化版实现几乎完全一致,唯一的不同是返回了一个TQMacroComplied类型的对象,这个对象在你不需要时,需要手动释放,以避免内存泄露。

替换操作由函数Replace的一种重载实现,唯一的参数是Complie返回的对象实例。

一般情况下,我们不推荐在Complie编译后,再入栈新的宏定义,因为它会引起在Replace时执行一遍宏类型检查,以确保生成正确的结果。

我们看一下这两个函数的声明:

[Delphi]

[C++]

4、释放Complie返回的结果(如果不为空),使用Delphi(Free或Dispose或FreeAndNil或由QString提供的FreeObject)或C++的delete即可。

好了,我想基本的使用步骤已经说的比较清楚了。更高级的主题咱们另章讨论。

 

 

分享到:

1 条评论

沙发空缺中,还不快抢~