【问题标题】:What ifdef should I use to check for class operators我应该使用什么 ifdef 来检查类运算符
【发布时间】:2014-08-02 20:52:43
【问题描述】:

我想在记录中添加一些类运算符,但我仍然想编写代码以在较旧的 Delphi 版本下编译。

我应该使用什么定义,这样操作符才能在所有支持它的版本中编译,但在旧的 Delphi 版本中会被忽略。

type
  Iso8601 = {$ifndef UNICODE}object{$else}record{$endif}
    data: Integer;
    {$ifdef ????} <-- what to put here
    class operator Add(A: Iso8601): Iso8601;
    {$endif}
  end;

我知道具有成员函数的记录与 Unicode 更新一致,但我对类运算符使用什么定义?

【问题讨论】:

  • 他们是introduced in Delphi 2006,所以是{$IF CompilerVersion &gt;= 18}
  • @TLama,你应该这样回答。
  • 显然使用编译器版本作为答案没有用......
  • 如果 Embarcadero 每次引入新的语言功能时都引入一个定义,那就太好了。然后我们可以这样做:{$ifdef class_operators} ....

标签: delphi conditional-compilation


【解决方案1】:

正如 TLama 所说:他们是 introduced in Delphi 2006,所以是 {$IF CompilerVersion &gt;= 18}

另外,请参阅http://docwiki.embarcadero.com/RADStudio/XE6/en/Compiler_Versions

并在 Complete list of defines for Delphi versions 上查看 ulrichb 关于 Jedi.inc 中文件的答案。这是我用来为不同编译器版本处理不同代码的方法

编辑:我也喜欢https://github.com/project-jedi/jedi/blob/master/jedi.inc,因为它对每种语言功能都有单独的定义,例如您请求的 SUPPORTS_CLASS_OPERATORS。

“UP”也定义了,例如DELPHIXE2_UP 在 XE3、XE4、5、6 等中也是如此

【讨论】:

  • 感谢您的回答,但请不要链接到 cmets。它们可以被删除,然后你的答案没有任何意义。我已更新您的答案以包含所有相关信息。
猜你喜欢
  • 1970-01-01
  • 2019-06-10
  • 1970-01-01
  • 2016-01-05
  • 2017-01-28
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
相关资源
最近更新 更多