微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

delphi – 是否有一种解决方法可以使类操作符适用于内置类型

我可以使用类操作符来使用中间保持记录.
这样我就可以隐式转换内置类型了.

program TestNewStringHelper; 
{$APPTYPE CONSOLE}
uses
  System.SysUtils;
type
  TStringRecord = record
  private
    Data: string;
  public
    class operator Implicit(const a: TStringRecord): Integer; inline;
    class operator Implicit(const a: string): TStringRecord; inline;
  end;

{ TStringRecord }

class operator TStringRecord.Implicit(const a: string): TStringRecord;
begin
  pointer(Result.Data):= pointer(a);
end;

class operator TStringRecord.Implicit(const a: TStringRecord): Integer;
begin
  Result:= StrToInt(a.Data);
end;

var
  input: TStringRecord;
  output: integer;

begin
  input:= '42';
  output:= input;
  WriteLn(IntToStr(output));
  ReadLn;
end.

我想做一些相反的事情:

var
  input: string;
  output: integer;

begin
  input:= '42';
  output:= input;  //Class operator magic
  WriteLn(IntToStr(output));
  ReadLn;
end.

根据在线帮助:

Note: Class and record helpers do not support operator overloading.

http://qc.embarcadero.com/wc/qcmain.aspx?d=72253

是否有解决方法来实现内置类型的隐式转换而不使用中间类型?

解决方法

记录和类助手是扩展现有类型的方法范围的唯一方法.并且助手不承认操作符超载.

您可以定义重载运算符的唯一方面是定义类型.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐