我想知道什么样的运算符重载是可能的(以及什么版本的Delphi)?
感谢Hallvard's great write-up on operator overloading,我知道:
- 添加(左,右:类型):类型(对于'+'运算符)
- 减去(左,右:类型):类型(对于' - '运算符)
- 乘(左,右:类型):类型(对于'*'运算符)
- 除(左,右:类型):类型(对于'/'运算符)
- 隐式(aValue:Type):AnotherType和
- 隐式(aValue:AnotherType):类型(用于隐式赋值:a:= b)
- 显式(aValue:Type):AnotherType和
- 显式(aValue:AnotherType):类型(对于'casts'的显式assignmetns:a:= Type(b)
然而,我不知道的是'=','< =','<','<>','>'的名称和'> ='运营商。这些存在,我可以使用Delphi版本吗?
PS:我现在仍然使用Delphi 2009,所以如果2010提供这些,我会有另一个强大的升级论证; - )
2 个答案:
答案 0 :(得分:17)
实际上,我自己找到了答案,但保留了一个问题,因为我可以想象人们会在stackoverflow上定期搜索这些信息;
有关运营商上传者的官方说明,请访问:http://docwiki.embarcadero.com/RADStudio/en/Operator_Overloading_(Delphi)
主要是,我正在寻找的是:
- Equal,for'='compare:Equal(a:type; b:type):Boolean;
- NotEqual,for'<>'比较:NotEqual(a:type; b:type):Boolean;
- GreaterThan,for'>'比较:GreaterThan(a:type; b:type)布尔值;
- GreaterThanOrEqual,对于'> ='比较:GreaterThanOrEqual(a:type; b:type):resultType;
- LessThan,for'<'比较:LessThan(a:type; b:type):resultType;
- LessThanOrEqual,对于'< ='比较:LessThanOrEqual(a:type; b:type):resultType;
答案 1 :(得分:10)
我只是将我的notes online会话放在可空类型上,并在一些会议期间给出了运算符重载。
它现在包含一个运算符表,名称和工作/不起作用的表。
WordPress最初使该表格格式不正确,但我设法恢复了它。
您也可以下载full set of slides and source code demos。
简而言之:
- 文档(甚至是DocWiki)不完整,请注意可靠
- 您不能重载按位运算符,因为编译器不支持BitwiseNot。您必须重载逻辑运算符。
- 适用时成对的重载运算符
- 了解现有运营商
- 实施隐式运算符时要非常小心
希望这会对你有所帮助。如果您需要更多信息,请告诉我:我已经完成了很多与运算符重载相关的生产工作。
- 的Jeroen