有条件地在C ++ Builder

时间:2016-06-22 07:38:50

标签: delphi c++builder conditional-compilation

有没有办法在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}

但看起来没有可用于此类条件编译的有用符号。

0 个答案:

没有答案