加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 09:23:12 所属栏目:大数据 来源:网络整理
导读:我可以使用类操作符来使用中间保持记录. 这样我就可以隐式转换内置类型了. program TestNewStringHelper; {$APPTYPE CONSOLE}uses System.SysUtils;type TStringRecord = record private Data: string; public class operator Implicit(const a: TStringReco
我可以使用类操作符来使用中间保持记录.
这样我就可以隐式转换内置类型了.

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

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

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读