有没有办法在Delphi中有条件地编译部分Delphi代码(但不能在C ++ Builder中编译)?
理由:
OmniThreadLibrary包含TOmniValue
类型的重载属性。
property AsArrayItem[idx: integer]: TOmniValue
read GetAsArrayItem write SetAsArrayItem; default;
property AsArrayItem[const name: string]: TOmniValue
read GetAsArrayItem write SetAsArrayItem; default;
这个概念并没有转化为C ++。 (IOW,如果您尝试使用C ++ Builder编译此代码,则编译失败。)
解决问题的一种方法是重命名其中一个属性并从中删除default
说明符。
property AsArrayItem[idx: integer]: TOmniValue
read GetAsArrayItem write SetAsArrayItem; default;
property AsArrayItemByName[const name: string]: TOmniValue
read GetAsArrayItemByName write SetAsArrayItemByName;
但是,这种方式不向后兼容,并且库的用户必须更改使用此默认属性的[string]
版本的源代码。
我想保持代码向后兼容并使其在C ++ Builder中工作。我的想法是做这样的事情
property AsArrayItem[idx: integer]: TOmniValue
read GetAsArrayItem write SetAsArrayItem; default;
{$IF CompilingInDelphi}
property AsArrayItem[const name: string]: TOmniValue
read GetAsArrayItem write SetAsArrayItem; default;
{$ELSEIF CompilingInC++Builder}
property AsArrayItemByName[const name: string]: TOmniValue
read GetAsArrayItemByName write SetAsArrayItemByName;
{$IFEND}
但看起来没有可用于此类条件编译的有用符号。