我正在编写自定义变体 PhysUnit,它类似于 VarConv,但更高级,不仅允许加减,还允许乘除单位,具有实数或复数,它工作正常,但速度极慢。
问题是,这个自定义变体包含了一些其他变体(简单类型,如整数或双精度,或其他自定义,如 VarComplex),因此在执行 DoAdd、DoSubtract 时,它首先检查两个操作数是否具有相同的族(例如长度),然后如果需要,添加转换其中之一的数量:
Left:=Left + Right*multiplier;
类似的东西,这里的左和右是变体。
编译器将此行转换为一系列调用:
_varCopy(tmp,Left);
_varAdd(tmp,Right*multiplier);
_varClear(Left);
_varCopy(Left,tmp);
_varClear(tmp);
而事实上,_varAdd 就足够了,无需为临时变体和所有这些变通方法分配/释放内存。
可悲的是:我不能只写 _varAdd(Left,Right),它没有在 VCL 中链接。
所以问题是:是否有可能无论如何都调用它并使其尽可能“干净”,而不会对直接内存地址进行讨厌的调用,当使用不同的选项或添加其他库进行编译时可能会发生变化?